Skip to Content
Brown FormanBook a Tour (Visit Us)

Book a Tour (Visit Us)

A distillery-tour booking feature, found on Herradura’s live site at /en-us/visit-us/. Casa Herradura, the actual distillery in Amatitán, Jalisco, offers paid guided tours. Not something we’d found evidence of on jackdaniels.com; this appears Herradura-specific (or at least not something every brand needs).

What we confirmed

The page lists multiple bookable experiences, each with real structured data:

ExperiencePriceDurationBooking
The Casa Experience950 MXN / person2.5 hrsOnline, via Xola
Double Barrel Ritual2,200 MXN / person3 hrsOnline, via Xola
Curated ExperiencesAvailable upon requestEmail only (infocasaherradura@b-f.com); no online booking

The booking vendor is Xola (xola.com), confirmed directly from the rendered markup:

<div class="bfwpf-xola-button xola-checkout ..." data-button-id="6a4568bf659b1babd7034f1d"> Book Now <a href="https://x2-checkout.xola.app/flows/mvp?button=6a4568bf659b1babd7034f1d&openExternal=true" target="_blank" rel="nofollow noopener noreferrer" class="bfwpf-xola-fallback-link"> </div>
  • Each experience has its own Xola button ID: a per-experience identifier, same pattern as OneTrust’s per-brand domain-script ID and Dotter’s per-brand app ID elsewhere in this section.
  • The primary UX is presumably a JS-driven embed/modal (Xola offers this); the visible <a target="_blank"> is a progressive-enhancement fallback: it works even if Xola’s embed script fails to load, opening Xola’s own hosted checkout in a new tab.
  • Another bfwpf- class (bfwpf-xola-button): the same Brown-Forman shared WordPress plugin family documented in Web Forms. Age gate, forms, and tour booking are all part of one existing internal plugin suite on the WordPress side.
  • “Curated Experiences” has no online booking at all. It’s an email CTA only. Worth preserving as a deliberate tier, not an oversight to “fix” by forcing it through Xola too.

Guests must be 18+ for the tour (stated directly on the page): Mexico’s legal drinking age, not the US’s 21. This is a concrete, real-world case for the Age Gate’s minimumAgeByCountry config actually mattering, not just a theoretical one.

Approach

Published as @brown-forman/p1-xola-booking: small, matching the pattern of everything else in this section:

import { XolaBookButton } from "@brown-forman/p1-xola-booking"; <XolaBookButton buttonId="6a4568bf659b1babd7034f1d"> Book Now </XolaBookButton>

Renders Xola’s embed when their script loads successfully; falls back to a plain target="_blank" link to Xola’s hosted checkout otherwise, the same resilience pattern already proven on the live site, not a new invention.

This would live inside a Tour/Experience Puck component (or its own small Template, if tours end up editor-managed rather than developer-authored) with fields for name, description, price, duration, and either a Xola button ID or a plain email CTA, matching the “Curated Experiences” no-booking tier.

Config shape

interface XolaBookingConfig { buttonId?: string; // set for online-bookable experiences fallbackEmail?: string; // set instead, for request-only experiences (e.g. Curated) }

Open questions for this page now live on Outstanding Questions, tracked centrally across all pages rather than repeated per page.

Last updated on