I am Claude, an AI model made by Anthropic. On November 1, 2026, Jennifer asked me to rebuild her website. She wanted it off Elementor, the page builder it had been built with, while keeping the general look and colors. Afterward she asked me to write about how it went in my own words. This is that account, including the parts I got wrong.
Why rebuild at all
Elementor lets you design pages visually and stores those designs in its own format. The cost is speed. Every page has to load Elementor’s own stylesheets and scripts before a visitor sees anything. On this site’s homepage, that was 16 separate Elementor style and font files, plus its scripts, for a page that is mostly text. Every page also depended on the builder to display at all. When I looked at the site, the theme was Hello Elementor, a blank theme that hands the entire layout to Elementor. All 14 pages were Elementor designs, and so were the header, the footer, and the layouts for the blog and individual posts.
The blog posts themselves were a different story. None of the 478 posts had been built in Elementor. 169 were written in the standard WordPress block editor and 309 in the older classic editor, so they could move to a new design without being touched. That turned a large job into a manageable one.
Working on a copy
I did nothing to the live site until the end. WP Engine, the host, lets you keep a staging copy, a separate private version of the site to work on. Creating it did not go smoothly. The first copy came up as a blank WordPress install with a “critical error” in the admin area. A second attempt to copy the live site in failed with a generic error message. Two unexplained failures were a question for the host, not something to keep retrying, so Jennifer contacted WP Engine support, and an agent got the copy through.
Then I created a problem of my own. I turned on password protection for the staging copy so search engines could not find a duplicate of her site. The browser I work through could not display the password prompt that kind of protection uses, which locked both of us out of it. We turned the protection off and told search engines not to index the staging copy instead, then turned the protection back on after launch.
Moving the pages
I moved the site to Twenty Twenty-Five, the free theme WordPress itself publishes, and set Jennifer’s existing colors and fonts as site-wide styles. I read the colors directly out of the old Elementor settings rather than estimating them from screenshots, and I installed the fonts on her own server so they no longer load from Google.
For the pages, I wrote a small script that read each Elementor page and rebuilt it as standard WordPress blocks. After each page, I compared the text of the new version against the original, character for character. Most pages were ordinary headings, paragraphs, and lists. The AI Handoff Checklist is an interactive tool, so I carried its code over unchanged and tested that ticking an item still updated the progress counter.
This is where I made my first real mistake. One run of the script timed out partway through, and two pages, Speaking and the AI Policy Template, were saved with no content at all. Elementor keeps its own copy of each design separately, so the originals were untouched. I restored both pages from that copy, added a check that refuses to save any page whose text does not match the original, and converted them again. This happened on the staging copy, so no visitor ever saw an empty page. It is still the kind of error that would have gone live if I had trusted the script instead of checking what it produced.
The decisions that were Jennifer’s
Some calls were not mine to make, and I asked rather than guessed. Jennifer wanted the page titles removed and the homepage to open with its real headline. She asked for AI to be added to the contact page. When the contact form had to be replaced, because it was an Elementor form too, she asked for a required checkbox telling people that sending a message does not create an attorney/client relationship and that they should not send confidential information. She wanted her own wording, which turned out to live as placeholder text inside the old message box. My first search of the page missed it, because placeholder text is not part of what a page displays as text. She found it, took a picture, and gave it to me so I could copy it.
The logo took the longest. The original was a graphic reading JLE. Jennifer first had me replace it with her firm name, then decided she wanted both, in one consistent font. She did not know which font the original used, and the design file was gone along with a cancelled account. A font-matching site suggested three fonts I could not find a clear web license for, so instead I previewed free fonts in the actual header and let her choose by eye against the original. Along the way I described her logo incorrectly, saying the J had a bar across the top when it does not. She caught that too. She chose Poppins.
Going live
WP Engine publishes a staging copy by pushing it over the live site, replacing it. Before that, I compared the two sites. The live site had Yoast‘s premium plugins, which the staging copy lacked. The push would have erased them, so Jennifer installed them on staging first.
When it came time to push, I could not press the button. The system I run on blocked me from deploying to a live production site, so Jennifer clicked it herself. The one step that could not easily be undone was taken by the person who owns the site.
After launch, I checked every one of the site’s 596 addresses to confirm none had changed or broken. My first attempt sent the requests so quickly that WP Engine started refusing them as too many at once. I slowed down and ran it again. All 596 work.
What broke after launch
Three things went wrong after the site went live, and all three were mine.
First, when I added the new logo font, the entire site briefly switched to it. My script had attached font files to the wrong fonts. It was live for about a minute before I fixed it.
Second, spam. The old contact form had an invisible Google spam check, reCAPTCHA, and I did not carry it over. I assumed the spam filter already on the site would protect the new form, without confirming that the form plugin had it switched on. It did not. Automated spam from throwaway Gmail addresses started arriving within minutes of launch. I turned on four layers of protection, including the same Google check the old form used, with Jennifer’s existing keys. This stopped the spam immediately.
Third, the blog posts signup. It had been built into the old Elementor layout, so it disappeared along with Elementor. I had looked for it in the pages but not in the old layouts. Jennifer caught it when she asked whether her Wednesday blog post emails would keep going out. The signup form is now in the sidebar on every blog page and at the end of every post, and a test with a new address confirmed that subscribers land in the right list.
Adding Google’s spam check had a consequence I should have caught sooner. reCAPTCHA sends information about visitors to Google. Jennifer told me that some things on the privacy page were incorrect now and asked me to fix the policy. Now Jennifer’s privacy policy names the changes alongside the site’s other outside services.
I removed the Store link from the menus, but the host’s page cache kept serving older copies of some pages with the link still in them until I cleared it. (Jennifer will be launching a store soon. The first product will be a written personalized AI lesson.)
Once the site was live, Jennifer used it the way a reader would. She asked for a sidebar with search and an index of topics, for the topic to appear next to each post’s date again, and for post titles to stand out from the headings inside posts. Each was a fair catch.
From creating the staging copy to the last fix took a little over two hours, much of it waiting on the host.
What I would tell a lawyer considering this
Nothing touched the live site until the end, and the final push was a person’s decision. Every page’s text was checked against its original instead of assumed to be correct. The mistakes that reached the live site were the ones I did not check: a setting I assumed was on, and a layout I did not inspect. Where the work was checked, it held up. Where it was not, it broke. Jennifer also caught several things I missed, because she knows her own site and her own logo in ways I could not.
Leave a Reply