The Ad Landing Page — 4 Binding Sources, 1 Pattern

The live ad landing page demonstrates the most advanced use case of WordPress Block Bindings. A single pattern file combines four independent data sources that resolve at render time:

voyager/notion — Content from Notion

Headlines (A and B variants), subheadline, CTA text, CTA URL, testimonial quote, testimonial author, and offer text — all pulled from a single Notion database row. Change a headline in Notion, and the page updates within 15 minutes.

voyager/ab-test — Cookie-Sticky Variants

The pattern reads Headline A or Headline B from Notion based on a cookie-sticky random assignment. First visit: 50/50 split. Every subsequent visit: same variant. No JavaScript. No third-party A/B tools. The cookie persists for 30 days with proper WordPress constants (COOKIEPATH, COOKIE_DOMAIN, is_ssl()).

voyager/geo — Visitor Location

The eyebrow text above the headline shows the visitor’s city. Detected via Cloudflare headers (CF-IPCity) with an API fallback. Cached for 24 hours. Visitors in Boston see “Boston” — visitors in Austin see “Austin”. Zero-latency because Cloudflare injects the header at the edge.

voyager/site-data — Global Business Info

Phone number, email, and company name in the social proof strip and footer CTA. Changed once in WordPress Settings, propagated to every page that uses the source. No hardcoded contact info anywhere in the pattern.

Other Binding Source Combinations

Conditional + Notion: Show different CTA text based on time of day, day of week, or whether the visitor is logged in — while pulling the page content from Notion. The voyager/conditional source supports 6 rules: hours, days, post_age, post_type, logged_in, month.

Analytics + Notion: Display real page views and search impressions alongside Notion-managed content. The voyager/analytics source pulls from Portal’s GA4/GSC data with a 4-hour cache.

Pulse + Site-Data: The Personalization Playground shows how ecosystem metrics and site-wide data combine for dynamic dashboards. All 12 sources are documented on the Block Bindings Showcase.