01

The problem

Event, hotel and pricing data lived in HubSpot, but the website needed a page for every event and an offer for every hotel, and bookings had to flow back into the CRM.

Copying data into WordPress by hand would mean two versions of the truth and pages going stale the moment a price changed. On top of that, bookings needed real payment logic: deposits, remaining balances, booking windows and cancellation deadlines.

02

What I built

  • HubSpot data model

    Custom objects for events, convention centres, hotels, suppliers, pricing and bookings, with a booking parent and booking-room children.

  • WordPress publisher plugin

    Turns HubSpot records into event pages and hotel offers using content contracts, conditional sections and modals.

  • Readiness validation

    Pre-flight checks block publishing when required data is missing, so visitors never see a half-built page.

  • Media diagnostics

    Hotel image naming rules, galleries and image-quality checks inside the admin.

  • Booking layer

    WooCommerce hotel selection, booking snapshots, deposits, remaining balance, cancellation deadlines, booking windows and payment states via Stripe.

  • Controlled write-back

    Orders and group inquiries written back to HubSpot on purpose, not through a blind two-way sync.

03

Key decisions

  1. Decision 1
    HubSpot owns the data

    WordPress only presents. Editors change a price once, in HubSpot, and the site follows.

  2. Decision 2
    Validate before publishing

    A page is generated only when its record passes the readiness checks.

  3. Decision 3
    Snapshot every booking

    The booking keeps the price and terms it was made with, even if HubSpot changes later.

  4. Decision 4
    Versioned patches, no staging

    With no staging site available, every fix shipped as a small, versioned patch with a way back.

04

Where it stands

The platform is live. Event pages and hotel offers are generated from HubSpot, and bookings run through WooCommerce and Stripe and are written back to the CRM.

Problems solved along the way include Stripe checkout loading issues and WooCommerce AJAX failures. Some publisher and booking behaviour is still being refined; I don't have production metrics to publish yet, so this page makes no claims about volume.

05

Stack

Event hotel booking platform

CMS
WordPress, custom publisher plugin
Commerce
WooCommerce, Stripe
CRM
HubSpot API, custom objects and associations
Language
PHP, JavaScript
My role
Architecture, WordPress development, HubSpot integration, sync, booking flows, troubleshooting
06

More case studies