A case study in bridging two ecosystems that were never designed to talk to each other.
You know that moment when a client says, "We love our Webflow site. We love the React app you built. Now make them feel like one thing"?
Yeah. That was my Tuesday.
Here is what I learned shipping a full React application inside a Webflow marketing site, complete with cross-domain navigation, multi-role Google authentication, and the kind of routing bugs that make you question your career choices at 11 PM.
The Problem (It's Always a "Simple" Request)
The client had two worlds:
- A Webflow marketing site, beautiful, polished, running their main domain. Landing pages, blog, the works.
- A React application, a feature-rich platform living on a subdomain, handling user dashboards, marketplace features, and authentication.
The ask? Build a brand-new marketing page in React (with custom components, dynamic feature sections, and interactive CTAs), then seamlessly embed it inside Webflow so visitors could not tell where one platform ended and the other began.
Oh, and also: update the navigation across five different role-based nav bars, add Google OAuth buttons to their sign-up and login flows, and make every link work perfectly no matter which domain the user happened to be on.
Simple.
The Architecture That Actually Worked
After exploring (and discarding) several approaches, we landed on a hybrid strategy that I would genuinely use again:
Webflow remained the source of truth for the marketing shell: header, footer, navigation, and global styling. React handled the heavy-lifting content component, compiled to static assets and hosted on Vercel as a CDN.
The integration point was absurdly elegant: a single <div id="root"></div> embedded inside a Webflow HTML Embed component, with the compiled CSS and JavaScript loaded via custom code injection in the page settings.
Webflow Page
├── Native Header (Webflow component)
├── HTML Embed: <div id="root"></div>
│ └── React App mounts here
│ ├── Hero Section
│ ├── Feature Grid
│ ├── Testimonials
│ └── CTA Section
└── Native Footer (Webflow component)
The result? The React content renders inside the Webflow wrapper. Users see one continuous, cohesive page. The CMS team keeps full control of the nav and footer. The development team keeps full control of the interactive content. Everyone wins.
Three Bugs That Taught Me Something
1. The White Screen of Nothing
First deploy: total white screen. No errors, no warnings, just... nothing.
The culprit? BrowserRouter. When your React app thinks it lives at / but Webflow is serving it at /customer-solutions, the router silently fails to match any routes. Switching to HashRouter fixed it instantly. The hash-based routing (/#/) operates independently of the server-side URL path.
Lesson: When embedding a React app inside another platform's URL structure, HashRouter is not a compromise. It is the correct tool.
2. The Invisible Images
Second deploy: page loads beautifully, but every image is broken. All the relative paths (/Assets/Hero.png) were resolving against the Webflow domain, not the Vercel deployment where the images actually lived.
The fix was converting every image reference to an absolute URL pointing to the Vercel deployment. Not glamorous, but bulletproof.
Lesson: In cross-domain embedding, nothing is relative. Be explicit about every asset path.
3. The 404 That Only Happened Half the Time
The "Solutions" navigation link worked perfectly on the marketing site but threw a 404 when clicked from inside the app subdomain. Why? Because internal page links in Webflow append the path to whatever domain you are currently on.
On www.domain.com → goes to www.domain.com/customer-solutions ✅
On app.domain.com → goes to app.domain.com/customer-solutions ❌
The solution: external URLs. Instead of linking to an internal Webflow page, the nav link uses the full absolute URL. Now it works from any domain.
Lesson: Multi-domain sites need absolute navigation links. Internal page references are a trap.
The Google Auth Integration
The final piece was adding Google OAuth buttons to the sign-up and login flows, directly inside Webflow's visual editor, without touching the backend.
The approach:
- Sign Up page: A styled Link Block containing the Google logo and "Sign up with Google" text, pointing to the OAuth endpoint with the appropriate
role_idparameter baked into the URL. - Sign In page: Same component, different URL, different label ("Continue with Google").
- Multiple user roles: Separate sign-up pages for different account types (buyer vs. seller), each with their own Google OAuth URL carrying a distinct role identifier.
No backend changes. No OAuth library. Just a well-constructed URL and a good-looking button. Sometimes the simplest solution is the right one.
What I Would Do Differently
Build a deployment script. Every Vercel deploy generates new hashed filenames for the CSS and JS bundles. That means manually updating two code snippets in Webflow's page settings after every deploy. A simple script that grabs the latest asset filenames and formats them as ready-to-paste HTML would save five minutes every deploy cycle, and eliminate a category of human error entirely.
Use CSS custom properties for cross-platform color matching. We manually matched the CTA section's background color to the Webflow footer's color. A shared design token system would make this automatic and maintainable.
Document the nav bar topology. The Webflow site had five separate navigation components for different user roles. Discovering this mid-project added unexpected scope. An upfront audit of the component architecture would have surfaced this earlier.
The Takeaway
The best integrations are not the ones where you rebuild everything in a single stack. They are the ones where you respect what each platform does best and find the thinnest possible seam between them.
Webflow is exceptional at marketing sites. React is exceptional at interactive applications. The art is in making the handoff invisible.
And if you are ever staring at a white screen after embedding a React app into a CMS page, check your router first. Trust me.
Get The Drop
Drop your email to get early access to tools and engineering insights before anyone else.