The problem
Genesis Home Renovations is a full-service remodeling contractor based in Santa Ana, California, serving Orange County, Riverside and the Inland Empire. The business had a WordPress site on OceanWP and Elementor, hosted on GoDaddy Managed WordPress. It worked, in the sense that it loaded. It also looked like every other builder template: stock Elementor blue, a navy footer with a map and payment icons, eight service pages, no privacy policy, no terms, and a phone number that had changed.
Under the surface it was worse. Whole sections rendered as blank gaps because Elementor's entrance animations were never triggered when LiteSpeed delayed the JavaScript. The navigation font fell back to system because the theme's Google Fonts CSS still pointed at a dead staging domain. The homepage gallery was an inactive Elementor Pro widget rendering nothing. The stat counters read "0+".
The constraint
There is no local source code for this site. It is built entirely in Elementor and edited through the WordPress admin. There was no WP-CLI, no SSH, no database access and no file access. Every change in this project was made through a browser, against a live site, with a backup taken first.
How AI and automation were used
Elementor as an API, driven from Playwright
Elementor exposes a JavaScript API inside its editor. Rather than clicking through nine new pages by hand, we cloned the Kitchen Remodeling page nine times and edited each clone from Playwright: fetch the container by element ID, run the settings command with the new heading, subtitle, intro, body and image, then run the save command. Because the clones inherit the original's element IDs, one CSS rule scoped to the nine page IDs handles the layout differences, such as hiding an emptied column and making its sibling full-width.
The same technique later rewrote copy across all 24 pages for the energy-efficiency repositioning. Each page's edits were read back after saving, and an independent verification pass caught one page that had received a neighbour's copy during a concurrent run. It was fixed and the lesson recorded: never run two automated edit passes against the same editor tab.
REST where REST worked
The Privacy Policy and Terms of Service are plain WordPress pages, not Elementor documents. They were created by posting HTML to the WordPress REST API from files that live in the repository, so an edit is a change to the source file and a re-post. Menu items also went through REST, with the caveat, documented for the next person, that the theme's icon picker makes the menu endpoint return an error even though the item is inserted.
What we built
The warm refresh
The old design had hard-coded blue, sky, green and navy into per-element Elementor CSS, not global colours. Rewriting every widget was not an option. Instead a single override lives in the Customizer's Additional CSS, which loads last, and remaps each legacy hex to the new "Terracotta and Warm Charcoal" palette. The logo's roof mark was recoloured to match. A record of that CSS, now around 45 KB, is kept in the repo alongside the brand guide, and the rule for future edits is simple: never reintroduce blue.
Seventeen services instead of eight
HVAC, home insulation, tankless water heaters, exterior painting, concrete and masonry, driveways and walkways, outdoor living, gutters and pool remodeling joined the original eight. Each has its own hero and feature image, a corrected map, and a place in the main menu dropdown, the Our Services grid, the footer and the mobile drawer. Long-form "California Codes and Your Rights" sections were drafted for eight of the services, covering Title 24, SEER2 minimums, HERS verification and homeowner protections.
What shipped
Timeline
- 2 July 2026: Site documented, phone number updated, warm palette applied, home service cards rebuilt, real Google reviews and brand marquee added.
- 3 July 2026: Nine service pages, legal pages, mobile drawer, footer rebuild, UI polish pass and the animation, font and counter fixes.
- 6 July 2026: Energy-efficiency copy rewrite across all 24 pages, verified page by page.
Problems worth talking about
The invisible sections
elementor-invisible and removes it when its scroll JS runs. With LiteSpeed delaying JS, or a crawler that never scrolls, it never runs. One global rule makes content always visible and lets the fade play if the JS does arrive.Fonts from a dead domain
Specificity wars
Cache is the real deploy
Where it stands
What we can and cannot claim
The refreshed site is live at genesishomerenovations.com with all seventeen service pages, the legal pages and the new copy. The counts above are taken from the project's page-ID table and commit history. The homepage stat counters (team size, active projects, projects delivered) are the client's figures, entered on request. We have no analytics or lead-volume access for this client, so this page carries no traffic or conversion figures. The legal pages are a template the owner has been advised to have an attorney review.
Renovate Smarter. Save Every Month.
— Genesis Home Renovations, homepage
What This Project Does Well
Technologies Used
WordPress 6.9, OceanWP, Elementor with Happy Addons, Ultimate Addons and Premium Addons, WPForms, Yoast SEO Premium, WPvivid backups, LiteSpeed Cache and QUIC.cloud, Cloudflare, GoDaddy Managed WordPress, Playwright browser automation, Elementor JS API, WordPress REST API, Google Fonts
Ready to Build Something Similar?
Let's discuss how we can help transform your business with a custom digital solution.
