Success story
dianebercik.com: off WordPress and Elementor, onto Next.js and Vercel
How a 77-page Maui real-estate site with live MLS search left WPEngine for a static Next.js codebase that an AI agent now maintains, without losing a URL, a listing, or a lead.
- 73
- pages migrated from the WordPress export
- 566
- media files carried over, byte for byte
- 0
- plugins, themes, or PHP versions left to update
- 100+
- pages on the site today, all AI-maintained
- WordPress + Elementor + Essential Addons
- WPEngine managed hosting
- BuyingBuddy IDX plugin for MLS search
- Yoast SEO, WordPress contact forms
- Edits: log in, fight the page builder, hope nothing breaks
- Next.js static export · React 19 · Tailwind CSS
- Vercel hosting, GitLab CI, every page pre-rendered
- BuyingBuddy kept, as a web component (no plugin)
- Native metadata + JSON-LD, llms.txt, RSS, Google Forms
- Edits: describe the change to Claude Code, review, deploy
The site
Diane Bercik sells homes and condos on Maui. Her site is the center of that business: community guides for every part of the island, homes-for-sale and condos-for-sale pages split by area and price tier, monthly market updates, and, critically, live MLS search powered by BuyingBuddy (iHomefinder). Buyers search listings directly on the site, and every search is a potential lead.
It ran on WordPress with Elementor and Essential Addons, hosted on WPEngine, with Yoast handling SEO. About 77 published pages in all, most of them built from five or six repeating Elementor templates.
Why move
The site wasn't broken. It was expensive to change.
Every content update meant logging into wp-admin, working through plugin update notices, and editing inside a page builder where one wrong drag reflowed a section. Diane needed to publish more, not less: a long-form "Retiring on Maui" guide, a condo-complex directory covering every named building on the island, a video-backed insights hub. On WordPress, each of those was a project that needed a developer who understood the theme.
The other motivation was AI. We wanted an AI coding agent to be able to do that work on instruction. That's close to impossible when the content lives in a MySQL database wrapped in Elementor JSON and shortcodes. It's routine when the content is files in a Git repository.
What we did
1. Inventory from the backup, not the browser. We pulled a full WPEngine site archive (database plus the wp-content/uploads folder) and wrote a small export pipeline against it. A parser read the published pages out of the SQL dump, pulled each page's Elementor layout data and Yoast metadata, and classified every URL into its template: community, homes-for-sale, condos, collection, market update, utility page, or IDX.
2. Convert the content, keep the structure. Elementor sections became plain JSON (for the templated pages) and Markdown/MDX (for the market updates). 73 pages came across; the five IDX pages were intentionally skipped because BuyingBuddy renders them itself. All 566 media files were copied into the new repo under the same paths, so existing image URLs kept working.
3. Rebuild as a static Next.js site. One React template per page type, a header with the same multi-level mega menu, and the original teal-and-white design carried over. The whole site is a Next.js static export: every page is pre-rendered to HTML at build time, so there's no server to patch and nothing to exploit.
4. Solve the hard part: MLS search. BuyingBuddy's IDX integration was the migration's only real risk. It turned out their v5 SDK exposes a <bb-widget> custom element that doesn't need WordPress at all. We load the SDK once in the root layout and drop the web component onto the search, results, details, and map pages. Same listings, same account, no plugin.
5. Forms, analytics, SEO. Contact, buyer, and seller forms were rebuilt as React forms submitting to Google Forms, with an Apps Script that emails each lead to Diane and her assistant. GA4 was re-wired with generate_lead conversion events. Yoast's job went to Next.js's native metadata API, JSON-LD structured data, a sitemap, an RSS feed, and an llms.txt for AI crawlers. Every original URL was preserved.
6. Deploy and hand off. The repo lives in GitLab with a CI pipeline that deploys to Vercel (production) and an internal Kubernetes cluster (staging). WPEngine was switched off.
What changed afterwards
This is the part that matters. In the first week after the repo went live, 46 commits landed, nearly all of them content and layout work done by Claude Code on instruction: a new Buyers nav section, a Retiring-on-Maui pillar page, a Maui condo-complex directory with building-filtered IDX search, fixes to form handling, sitewide typography and contrast adjustments.
Since then the site has grown from 73 pages to well over 100, including pages for all 96 named condo complexes on Maui, an Insights hub with articles and video episodes, and Maui area and visitor guides. None of that required a WordPress developer, a page builder, or a plugin. It required describing the change, reviewing a preview, and merging.
The maintenance bill is now a Vercel plan and a Git repository Diane's business owns outright.
Stack, before and after
| Before | After | |
|---|---|---|
| Platform | WordPress 6 + Elementor + Essential Addons | Next.js static export, React 19, Tailwind CSS |
| Hosting | WPEngine | Vercel (static, global CDN) |
| Content | MySQL rows, Elementor JSON | JSON + Markdown files in Git |
| MLS / IDX | BuyingBuddy WordPress plugin | BuyingBuddy <bb-widget> web component |
| Forms | WordPress form plugin | React forms → Google Forms + Apps Script email |
| SEO | Yoast | Next.js metadata, JSON-LD, sitemap, RSS, llms.txt |
| Analytics | GA4 tag | GA4 with lead-conversion events |
| Who makes changes | A WordPress developer | Claude Code, on Diane's instruction |
Have a WordPress site with an integration you think can't be moved? That's the first thing we check in a free migration assessment.