About the project
Gundry MD’s brand site lived in WordPress while the cart ran as a separate app. The split stack caused cross domain session loss, broken attribution, duplicated localization rules, and design drift. I was part of the team that rebuilt the site in Builder.io and embedded the cart in the same application so routing, state, localization, and analytics are unified. Marketing can now build pages directly in Builder.io while users see consistent pricing and a smoother path to checkout.
Goals
- Unify marketing and cart in one application for a seamless browse to checkout flow
- Fix session and attribution loss by keeping analytics first party across the funnel
- Deliver reliable localization with country and currency selection that persists
- Improve performance and Core Web Vitals while keeping design fidelity
- Make marketing self serve with a structured CMS and reusable components
Project execution
What we built
- Information architecture refresh - clearer paths from product education to add to cart
- Component library - React components for product cards, price blocks, CTAs, banners, loop grids, and modals
- Shared app context - single source of truth for cart, currency, and locale across all pages
- Embedded cart module - cart runs in app rather than a separate domain so state persists
- Localization - geo detection plus a manual currency switcher that remembers the choice
- Pricing utility - normalized currency formatting, rounding, and display rules
- SEO and localization metadata - locale aware titles and descriptions, hreflang, canonical checks
- Performance - SSR with edge caching, image resizing, font preloads, deferred non essential scripts
- Analytics - GA4 and ad pixels standardized as first party events with consistent event names
- Quality - e2e smoke tests for add to cart, currency switch, and checkout handoff
Migration approach
- Audit of WordPress templates, plugins, and integrations, then a minimal equivalent set in Builder.io
- Content model designed in Builder.io for products, offers, promos, FAQs, and landing pages
- Controlled cutover using a staging (UAT) environment and a URL mapping plan for priority pages
- Side by side visual and tracking checks to validate parity before launch
Project results
Outcomes
- Seamless browse to cart without cross domain redirects or lost sessions
- Consistent pricing and currency display for international users with settings that persist
- Cleaner analytics across the full funnel due to first party events and no cross tool drift
- Faster pages in lab tests with stable CLS and improved LCP on key templates
- Marketing ships new pages directly in Builder.io using approved components and tokens
What comes next
- Programmatic landing page variants with safe defaults for performance and tracking
- Deeper CRM and subscription integrations and order history in account views
- Additional international locales and structured data for product rich results
Why this works for GundryMD
- One stack for content, cart, and analytics means fewer moving parts and fewer regressions
- Editors can publish quickly while design stays consistent through a shared component library
- A measurable performance and accessibility baseline that the team can maintain
- Lower maintenance overhead with one codebase, one deploy pipeline, and one permissions model