Websites 2026

G-PRO ECO ENERGY - Website Rebuilt After Three Years

The client came back after three years. We turned an Oxygen Builder site running fifteen plugins into a custom theme with five - in one week. Along the way we launched the client's new service: roofing.

G-PRO ECO ENERGY
Renewables / Photovoltaics / Roofing
One week
G-PRO ECO ENERGY - Website Rebuilt After Three Years

The client came back after three years

In August 2023 we built a company website for G-PRO ECO ENERGY from Kalisz, on WordPress with Oxygen Builder. The company installs photovoltaics, heat pumps, energy storage, air conditioning and monitoring systems, and works across Kalisz and a radius of a hundred kilometres around it.

In September 2026 an email arrived: "roofs tab etc.". The client had moved into a new service, roofing, and needed a page for it. Attached were the finished copy and twenty-one photos.

We built the tab the same day. While we were at it, we looked under the bonnet and it turned out that rebuilding the whole site made more sense than adding another storey to a structure from three years ago. The client agreed in the same conversation.

3 years
Between the two projects - the client came back unprompted

1 week
From the email about a tab to the rebuilt site in production

15 → 5
Plugins on the site after the rebuild

0
Requests to external servers while the page loads

What we found

The site worked, it collected enquiries and there was nothing dramatic about it. The problem was how many moving parts it was made of.

Fifteen active plugins. Three for forms - Contact Form 7, weForms and the page builder's own form. Two for SEO and analytics - Yoast and Site Kit. On top of that, a separate plugin for the cookie banner, another for SVG support, another for maintenance mode, and a page builder that stored every page in the database in its own proprietary format.

The result: eleven stylesheets, twenty-five scripts and eight external domains queried on every visit.

There was also a problem no audit would show. The client's administrator account had its permissions cut back by the page builder. Oxygen has a feature called Client Control, which restricts the dashboard so the client cannot break the layout. The side effect: the business owner could not install a plugin, open the menu editor or add an item to the navigation on their own website.

Before

15 active plugins, including three for forms and two for SEO

11 stylesheets and 25 scripts on the homepage

8 external domains queried during page load

Page layouts stored in the page builder's format

Client account with no access to plugins or menus

Service content scattered across ordinary pages

After

5 plugins - backups, security and the media library

2 stylesheets and 3 scripts

Zero requests to external servers - the font is hosted locally

Custom theme, layouts in PHP templates

The client manages all content from the dashboard

Services as a dedicated content type - adding one feeds the whole site

Forms, SEO and cookies moved into the theme

Instead of five plugins doing five jobs, five modules inside the theme.

The contact form was written from scratch. It submits without reloading the page, with a working fallback for browsers without JavaScript. Spam protection without a captcha that annoys customers: a hidden honeypot field, a check on how long the form took to fill in and a limit on submissions from a single address. The list of topics in the form is built from the list of services, so it never has to be maintained twice.

Metadata and structured data are generated by a theme module. One consistent JSON-LD graph instead of several separate blocks: the company as a LocalBusiness with its hundred-kilometre service area described as a geographic circle, a service catalogue built automatically from the content, breadcrumbs, FAQ and navigation markup that tells search engines which pages matter most.

Cookie consent is a custom banner with Google Consent Mode v2. Everything is denied by default - until the user clicks, no tool writes a single cookie. A saved choice is restored immediately on arrival, before the tag container has a chance to send anything.

WordPress 7.1
PHP 8.3
Custom theme
Plain CSS with custom properties
BEM
JavaScript ES6+
ACF Pro
Schema.org JSON-LD
Google Consent Mode v2
Google Tag Manager
llms.txt
Chrome DevTools Protocol

A permissions problem solved without asking for access

We started the deployment with nothing but the client's account - the one the page builder had cut down. We could upload a theme, but we could not install a plugin or touch the menus.

Instead of waiting for server credentials, we built the theme so that it did not need them.

1

ACF bundled inside the theme

Advanced Custom Fields Pro has an officially supported mode for including it in a theme as a library. Uploading the theme therefore installs everything at once - no separate plugin installation. As a bonus, the client cannot accidentally deactivate something the content of the entire site depends on

2

Navigation that builds itself

With no right to edit menus, the theme generates them from what is in the database: a services dropdown listing every service, followed by pages recognised by their address. Adding a service in the dashboard puts it in the menu, the footer, the homepage tiles and the structured data in one go

3

A content installer in the dashboard

The content migration runs both from the command line and from a button in the theme settings - in case of a server without shell access. The script identifies entries by their address, so running it again updates the content instead of creating duplicates

4

The page builder switched off from within the theme

Oxygen overrides the template regardless of which theme is active - switching themes alone is not enough. A theme module restores WordPress's normal template hierarchy and dequeues the plugin's assets, so the switchover was instant

The client's content stayed, the structure changed

We did not rewrite the copy. The company description, the scope of each service, the list of towns - all of that is the client's content and the client's knowledge of their own market. What we changed was how it is presented.

The biggest change concerns the towns. In the old version they sat in eight consecutive paragraphs in the middle of the company description. We split them into groups by service - one set of towns for photovoltaics, another for heat pumps, another for energy storage. Linking a service to a town carries weight with search engines, a flat list of thirty names does not.

We moved everything across: eight services, forty-four completed projects and every image in the media library. Old URLs received 301 redirects so that three years of search rankings were not lost.

The new service got the most attention

For the client, roofing is a move into a new industry and the service with the highest margin, so its page is the most developed: a tiled gallery of completed jobs, five steps of working together from the first phone call to final handover, and the six questions customers ask most often - including the most important one, whether fitting panels will void the roof warranty.

That is in fact the core of G-PRO's expanded offer: one contractor for both the roof and the photovoltaics means one point of responsibility, with no argument over whose fault a leak is.

Measured, not assumed

We checked the mobile view through the browser's debugging protocol, with genuine device emulation. The reason is mundane: a browser running in headless mode enforces a minimum width of five hundred pixels, so a screenshot labelled "390 px" is really a 500-pixel render cropped to 390. Style rules behave differently there than on a phone, and a test like that proves nothing.

The tool also measures the document width and points to any element that overflows the edge. Every page returns the same result: a 390 px document, zero horizontal scrolling.

The same approach uncovered a mobile menu bug that cannot be seen in the code. The header used a background blur, and that property creates a new containing block for fixed-position elements. The menu was therefore positioned relative to the 78-pixel header instead of the screen - it opened as a 33-pixel strip, and once the page was scrolled it was out of view altogether.

Results

From 15 plugins down to 5
The form, SEO, structured data, cookie consent and SVG support all run inside the theme

11 stylesheets and 25 scripts cut to 2 and 3
Locally hosted font, zero requests to external servers while the page loads

The client manages the content in-house
Services, projects, the hero section, FAQ and metadata - all from the dashboard, without touching code

Visible to search engines and language models
LocalBusiness structured data with a 100 km service area, a custom robots.txt and an llms.txt file describing the company for AI

GDPR compliance documented, not just declared
Consent Mode v2 with default denial, plus a privacy policy and terms that describe what is actually implemented

A new service brought to market
A roofing page with a gallery, process and FAQ - ready for advertising campaigns

What comes next

The next stage is an advanced quote calculator for photovoltaics and roofing - a tool that works out the scope and an indicative cost before the customer even picks up the phone. The client chose a custom solution, written around the way the business works, rather than an off-the-shelf plugin.

And that is really the answer to the question of what KamikStudio does. Not assembling websites from building blocks, but building tools that fit a specific company. Sometimes it is a website, sometimes a scheduling system, and sometimes a calculator you will not find in any plugin directory.

Project by KamikStudio • 2026

Have a similar project?

Tell us about your needs. We will prepare a quote and a delivery timeline.