HarborBook

Description

HarborBook is a WordPress booking plugin built for tour operators, activity providers, boat charters, watersports centres, guides, courses, and other experience-based businesses.

Create timed activities, day trips, multi-day experiences, and recurring courses. Configure capacity, schedules, pricing, passenger rules, optional extras, and pickup locations, then publish a mobile-friendly booking form with a shortcode or Gutenberg block.

Activity types and booking modes

  • Timed activities — departures with a defined duration, such as boat tours, classes, or equipment sessions.
  • Day trips — full-day experiences with one or more scheduled departures.
  • Multi-day activities — experiences spanning several days and nights.
  • Recurring courses — multi-session activities with a configurable gap between sessions.
  • Group bookings — customers reserve seats from shared departure capacity.
  • Private charters — one booking reserves the departure at a flat private rate.
  • Group or private — let the customer choose either booking mode while the departure is still available.
  • Catalog organization — classify activities with Activity Type, Category, and Location taxonomies.

Scheduling and availability

  • Weekly operating schedules with multiple departure times and per-slot capacity.
  • Date-specific schedule overrides and blackout dates.
  • Booking lead time, same-day cutoff, customer booking window, and slot-generation window.
  • Activity-level minimum and maximum group sizes.
  • Capacity locking while checkout is in progress and automatic overbooking prevention.
  • Calendar and availability screens for reviewing departures across activities.

Pricing, passengers, extras, and pickups

  • Adult, child, and infant passenger rates with editable labels and age bands.
  • Flat private-charter pricing.
  • Per-activity tax (global default or custom rate).
  • Optional extras priced as a flat amount, per person, or per day, with quantity and stock limits.
  • Pickup locations with addresses, instructions, pickup-time offsets, surcharges, and manual coordinates.
  • Activity safety rules for minimum/maximum age, maximum weight, and additional guest details.

Customer booking widget

The responsive booking widget guides a customer through activity selection, date and departure, pickup, guests, extras, contact details, review, payment, and confirmation. Steps that are not relevant to the selected activity are skipped automatically.

Use [harborbook] to show every published activity, [harborbook activity_id="123"] to show one activity, or insert the native HarborBook Booking Widget block.

Customers receive a booking reference, trip summary, receipt, meeting information, and Google/Apple/Outlook calendar links after booking. Optional Google Maps and QR-code features are described under External services below.

Booking operations

  • Searchable booking list with date, activity, source, payment, and status filters.
  • Manual bookings for telephone, walk-in, or agent reservations.
  • Pending, confirmed, completed, cancelled, and no-show workflows.
  • Printable booking vouchers and optional check-in QR codes.
  • Payment records for cash, card terminal, bank transfer, or another offline method.
  • Customer profiles with booking history, lifetime value, and internal notes.
  • Month, week, day, and list calendar views.
  • Dashboard totals, revenue, received and outstanding balances, activity mix, and upcoming departures.
  • Booking, revenue, top-activity, pickup-manifest, and operational reports.

Payments and notifications

The core plugin includes manual / pay-on-arrival booking. It is off on a fresh installation; enable it under HarborBook Settings Payments before accepting widget bookings. Customers then reserve online and you collect or record payment using your own offline process. The core plugin does not collect card details or include an online card gateway.

Customisable notification templates cover pending bookings, confirmations, 72-hour/24-hour/2-hour reminder toggles, operator and weather cancellations, review requests, and refund approval. Scheduled reminders and review requests rely on WordPress cron. Email delivery relies on your WordPress mail configuration or SMTP/mail plugin.

Demo data and catalog export

Under HarborBook Settings Demo Data, administrators can install an optional sample catalog containing six activities across all four activity types, plus extras, pickup locations, schedules, pricing rules, and locally generated cover images.

Sample bookings are a separate option and are off by default. Importing again replaces only the previous HarborBook demo import; it does not overwrite activities or catalog records you created yourself. The same screen can remove imported demo records and download either the bundled demo catalog or the current site catalog as JSON.

Designed for tour and activity businesses

  • Boat charter and sailing trip operators
  • Watersports centres (surfing, kayaking, scuba diving, snorkelling)
  • Guided tours and sightseeing experiences
  • Outdoor adventure companies (hiking, rock climbing, zip-lining)
  • Food and cultural tours
  • Training providers running recurring classes or courses
  • Any experience business taking scheduled reservations

Privacy and data ownership

HarborBook stores booking and customer information in your WordPress database. It does not include marketing analytics, advertising tracking, or phone-home telemetry. External QR and Google Maps functionality is optional and documented below.

Plugin data is preserved when HarborBook is deactivated or deleted by default. To permanently remove HarborBook activities, bookings, custom tables, settings, and related data during deletion, first enable Remove All Data on Uninstall under HarborBook Settings Appearance Advanced. Back up your site before enabling that option.

Built to extend

HarborBook exposes WordPress actions and filters for developers. The canonical inline hook reference is included at includes/class-hb-hooks.php. The complete human-readable source and build configuration for the compiled booking widget are also included in the plugin.

External services

This plugin may connect to external services when specific features are used.

goQR.me QR Code Generator API (api.qrserver.com)

  • What it is used for: HarborBook renders a QR code that encodes a booking’s reference code. The QR code is shown on the printable booking voucher, on the admin booking detail screen, and inside booking confirmation emails so staff can quickly look up a booking by scanning it.
  • Opt-in: This is disabled by default. No request is made to api.qrserver.com unless an administrator enables Booking QR Codes (goQR.me) under HarborBook Settings General and acknowledges the goQR.me privacy disclosure in the confirmation dialog. While it is off, vouchers, booking screens, and emails simply render without a QR code.
  • What data is sent and when: Once enabled, the booking reference string (for example, HB-A1B2C3) is sent by your WordPress server to the API when HarborBook generates a voucher, booking detail view, confirmation payload, or notification containing the QR code. No customer name, email, phone number, passenger detail, or payment information is sent.
  • Failure behaviour: QR requests use a short timeout. A failed request never blocks the booking; the QR image is simply omitted.
  • Service provider & policies: The service is provided by goQR.me. See the goQR.me API documentation and the goQR.me privacy policy.

Google Maps (maps.googleapis.com / Google Maps embeds)

  • What it is used for: Optional Google Places address search and map picking while an administrator edits pickup locations, plus optional meeting-point embeds and Google Maps links when an administrator saves a Google Maps iframe on an activity.
  • Activation: HarborBook works without Google Maps. Admin address search requires a Google Maps browser API key under HarborBook Settings General Integrations with Maps JavaScript API and Places API enabled. Activity map embeds can be added from Google Maps Share Embed a map without entering that API key.
  • What data is sent and when:
    • Admin map picker: the administrator’s browser loads the Google Maps JavaScript API using the configured key. Address searches, browser/network information, and map interactions are handled by Google.
    • Public embeds: when a saved map is displayed, the visitor’s browser connects to Google and may disclose standard request information such as IP address and browser headers. Following a Google Maps link also sends the visitor to Google. HarborBook does not add customer names, contact details, or payment data to the map URL.
  • Service provider & policies: Provided by Google. See Google Maps Platform Terms and the Google Privacy Policy. Maps features are optional — leave the API key empty and omit map embeds if you do not want to use Google Maps.

Online card checkout via Stripe is provided by a separate HarborBook Stripe companion add-on. That add-on documents Stripe.js under its own External services section; the core plugin alone does not load Stripe.js or process card payments.

All other UI libraries used by HarborBook (calendar, date picker, dropdown, chart libraries) are bundled locally and served from your own site.

Source code and build process

HarborBook ships one compiled asset: the front-end booking widget
(public/js/booking-widget.min.js and public/css/booking-widget.min.css).

The complete, human-readable source for that bundle is included in this plugin
under src/booking-widget/ (React components, hooks, store, and stylesheet),
together with the build configuration (package.json, package-lock.json, and
vite.config.js). To rebuild the widget from source:

  1. Install Node.js 18 or newer.
  2. From the plugin directory, run npm install.
  3. Run npm run build.

The build writes the compiled files back to public/js/ and public/css/.

Third-party libraries in admin/vendor/ are unmodified upstream releases and
each ships alongside its original, non-minified source file:

  • Select2 4.1.0 — select2.js / select2.css (MIT)
  • flatpickr 4.6.13 — flatpickr.js / flatpickr.css (MIT)
  • FullCalendar 6.1.10 — index.global.js (MIT)
  • Chart.js 4.5.1 — chart.umd.js (MIT)

Screenshots

Blocks

This plugin provides 1 block.

  • HarborBook

Installation

From the WordPress Plugins Directory (recommended)

  1. Go to Plugins Add New in your WordPress admin.
  2. Search for HarborBook.
  3. Click Install Now, then Activate.

Manual installation

  1. Download the plugin zip file.
  2. Go to Plugins Add New Upload Plugin.
  3. Upload the zip and click Install Now, then Activate.

First-time setup

  1. Go to HarborBook Settings and fill in your business name, timezone, currency, and contact email.
  2. Enable and configure pay on arrival under Settings Payments, then review booking rules, passenger labels, and notification templates.
  3. Create extras and pickup locations if your activities need them.
  4. Go to HarborBook Activities Add New and configure the activity, schedule, capacity, pricing, and availability.
  5. Create a page such as “Book Now” and add [harborbook], or insert the HarborBook Booking Widget block.
  6. Make a test booking and confirm that WordPress can send email.

To explore before entering your own catalog, open HarborBook Settings Demo Data. Review the warning, choose whether to generate cover images or sample bookings, and explicitly confirm before importing.

FAQ

What types of activities can I sell with HarborBook?

HarborBook supports timed activities, day trips, multi-day experiences, and recurring multi-session courses. Each activity can use shared group capacity, a private-charter rate, or let the customer choose between group and private booking.

Can HarborBook manage private tours or boat charters?

Yes. Set the activity booking mode to Private for a flat-rate charter, or Both to offer shared seats and a private option. A private booking reserves the whole departure so another customer cannot book the same slot.

Can I accept online card payments?

The core plugin handles manual / pay-on-arrival bookings. Guests reserve a slot and you record cash, card-terminal, bank-transfer, or other offline payments. The core plugin does not collect card numbers or include an online card gateway.

How do I place the booking form on a page?

Insert the HarborBook Booking Widget block or add [harborbook] to any page. To show one activity only, use [harborbook activity_id="123"], replacing 123 with the activity post ID.

Does the booking form work on mobile devices?

Yes. The booking flow is responsive and supports activity selection, departure dates, pickup choices, passengers, optional extras, customer details, review, payment instructions, and confirmation.

How does HarborBook prevent overbooking?

Each generated departure has a capacity counter. HarborBook checks availability and temporarily reserves capacity during checkout, then confirms or releases it according to the booking result. Private bookings require the departure to be available for exclusive use.

What happens when a departure is fully booked?

Fully booked departures remain visible but unavailable by default. Enable Hide fully booked slots under HarborBook Settings Appearance if you prefer to remove them from the customer-facing list.

Can I close dates or change a departure on one date only?

Yes. Use schedule overrides for date-specific departure changes and blackout dates for closures. Weekly schedules continue to control normal operating days.

Can I charge different adult, child, and infant prices?

Yes. Enable the passenger types you use, customise their labels and age bands, and set rates per activity. You can also make infants free.

What pricing options does the core plugin include?

Core pricing covers adult, child, and infant rates, a flat private-charter rate, and tax (a global default under Settings, or a custom rate per activity). Deposit and prepayment policies require a compatible HarborBook payment-policy add-on; core alone does not collect card payments or calculate a deposit.

Can I sell equipment rental, meals, or transfers as extras?

Yes. Link extras to selected activities and price them as a flat amount, per person, or per day. Extras can have minimum/maximum quantities and stock limits.

How do pickup locations work?

Create reusable pickup locations with an address, guest instructions, time offset, optional surcharge, and coordinates. Link them to an activity and arrange their order. Customers choose a pickup during booking or can select no pickup when that option is available.

Is a Google Maps API key required?

No. HarborBook works without Google Maps. The API key only enables Google Places address search and the interactive map picker while an administrator edits pickup locations. Manual addresses and latitude/longitude values work without a key.

How do I configure the Google Maps API key?

Create a browser key in Google Cloud, enable the Maps JavaScript API and Places API, and restrict the key to your site’s admin URLs and only the APIs it needs. Paste it under HarborBook Settings General Integrations. Google may require billing to be enabled on the Cloud project.

Can I show a meeting point map without an API key?

Yes. Edit the activity and paste the iframe from Google Maps Share Embed a map Copy HTML. HarborBook validates supported Google Maps embed URLs, displays the map where relevant, and derives a Google Maps link for booking information and email templates. Loading an embedded map connects the visitor’s browser to Google.

How do booking QR codes work?

Booking QR codes are off by default. Under HarborBook Settings General Integrations, enable Booking QR Codes (goQR.me) and acknowledge the disclosure. HarborBook then sends only the booking reference, such as HB-A1B2C3, to api.qrserver.com to retrieve a QR image for vouchers, booking details, and confirmation emails. It does not send the customer’s name, email, phone, passenger details, or payment information. If the service is unavailable, the booking still works and the QR image is omitted.

Can I add bookings manually and identify where bookings came from?

Yes. Create telephone, walk-in, or agent bookings under HarborBook Bookings Add Manual Booking. Sources are labelled Manual, Customer (logged-in widget), or Online (guest widget) and can be filtered in the booking list.

Can customers cancel or reschedule their own bookings?

No. An administrator handles cancellations, reschedules, and refunds from the booking administration screens. Use the dedicated cancellation workflow when you need to record a reason and send the configured cancellation notice.

Can I require customers to log in before booking?

Yes. Guest booking is enabled by default. Under HarborBook Settings Booking Rules, disable guest booking and enable Require Login to Book. HarborBook uses WordPress accounts; enable site registration in WordPress settings if customers need a sign-up option.

Does HarborBook include a customer self-service portal?

No. Core HarborBook does not provide a page where guests cancel, reschedule, or pay by themselves. Administrators manage booking changes. Developers and compatible add-ons can provide a management URL through the harborbook_customer_portal_url filter.

Can I record a payment collected outside WordPress?

Yes. Open the booking and record the amount, payment method, reference, and note. Received amounts and unpaid balances appear in the dashboard and reports.

Why did a customer not receive an email?

Check the booking status and the relevant template under HarborBook Settings Notifications. Confirmation is associated with the confirmed workflow, and scheduled reminders require WordPress cron. HarborBook sends through WordPress wp_mail(), so production sites should use a reliable SMTP or transactional-mail configuration and check its delivery logs.

Why are future dates or time slots missing from the widget?

Confirm that the activity is published and active, its weekly schedule contains active slots, and the dates are inside both the customer booking window and generated-slot window. Also check lead time, same-day cutoff, blackout dates, overrides, capacity, and minimum passenger rules. Re-save the activity schedule after changing its slot-generation window.

Does the demo-data importer overwrite my catalog?

No. It adds a separate, tagged HarborBook demo catalog alongside your own content. Importing a second time removes and replaces only the previous demo import. Optional sample bookings are written to the real HarborBook booking tables, so use them on a staging or test site unless you intentionally want sample reporting data. The Demo Data screen includes a separate removal action.

Can I export or move my catalog?

The Demo Data screen can download the current catalog as JSON for support, auditing, or use as a template. Version 1.0 does not provide a general upload-and-restore tool for an arbitrary exported JSON file.

Is HarborBook GDPR-friendly?

HarborBook stores the information submitted during booking, including contact details, booking choices, payment records, notes, and optional participant details. It does not include telemetry or marketing tracking. Site owners remain responsible for their legal basis, retention policy, privacy notice, user requests, email provider, and any optional Google Maps or QR service they enable.

What happens to my data if I deactivate or delete HarborBook?

Deactivation preserves your data. Deleting the plugin also preserves data by default. If you first enable Remove All Data on Uninstall under Settings Appearance Advanced, deleting HarborBook permanently removes its catalog posts, custom tables, settings, and related plugin data. Make a backup before using that option.

What are the server requirements?

WordPress 6.2 or newer, PHP 8.1 or newer, and the MySQL/MariaDB database used by WordPress. PHP GD is optional and is used only when generating local demo cover images.

Where can I get support?

Start with HarborBook Settings Help, then use the WordPress.org support forum for ordinary questions and reproducible bugs so answers can help other users.

For concise product feedback, a private error report, or a quick clarification, email info@coresolstudio.com. Include the HarborBook version, WordPress/PHP versions, exact steps, expected result, actual result, and relevant error text. Do not send passwords, administrator access, API keys, or real customer information.

How should I report a security issue?

Do not publish exploit details in the support forum. Email info@coresolstudio.com with reproduction details and affected versions. Security or guideline issues involving a WordPress.org-hosted plugin may also be reported privately to plugins@wordpress.org.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“HarborBook” is open source software. The following people have contributed to this plugin.

Contributors

Translate “HarborBook” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.0.0

Release date: 2026-07-28

  • Initial WordPress.org release.
  • Timed, day-trip, multi-day, and recurring-course activities with group, private, or combined booking modes.
  • Activity and schedule management with capacity, passenger types, extras, pickup locations, overrides, and blackout dates.
  • Passenger, private-charter, and tax pricing.
  • Embeddable multi-step booking widget (shortcode + Gutenberg block).
  • Manual / pay-on-arrival bookings with offline payment recording.
  • Booking administration: list, detail, add/edit, calendar, vouchers, and source tracking (Manual / Customer / Online).
  • Email notifications with customisable templates.
  • Dashboard analytics and operational reports (including pickup manifest).
  • Optional Google Places pickup editor and validated Google Maps meeting-point embeds.
  • Opt-in goQR.me check-in QR codes with explicit external-service consent and graceful fallback.
  • One-click demo catalog, optional sample bookings, generated local cover art, clean removal, and JSON catalog export.
  • Participant safety limits and additional-guest name collection.
  • Locally bundled admin UI libraries (no CDN dependency for calendar/datepicker/charts).
  • Fixed: Widget Date/Time calendar — available dates no longer show as fully booked when slots have capacity (availability query includes slot IDs for min-passenger filtering).
  • Fixed: Widget date display — September and other month names no longer corrupted (e.g. “thepte09ber”) when using F/m/S date format tokens.