My role: UX Designer & Developer
Your Local Window Cleaners

From two-page website to a scalable subscription product

How a painful sign-up form and a slow, plugin-heavy WordPress site became a fast, conversion-optimised subscription platform, rebuilt twice, in two different technologies, to get there.

Week-on-week customer growth

75 %

Rebuilds shipped

2 X

React build duration

3 MO

Week-on-week customer growth

75 %

Rebuilds shipped

2 X

React build duration

3 MO

01 - The Problem

A website that was working against the business

Your Local Window Cleaners came to me with a WordPress site that had been bolted together over time, two pages, a sprawling collection of plugins, and a sign-up form that asked customers everything at once on a single long page. It was slow, difficult to navigate, and the sign-up experience in particular created unnecessary friction at exactly the moment a customer was ready to commit.

 

The business offered a genuinely useful service: subscription window cleaning, with customers signing up for regular cleans at a fixed recurring cost. The proposition was simple. The website made it feel complicated.

"The product was straightforward. Customers just needed their windows cleaned on a schedule. The website made it feel like a bureaucratic process to get there."

Beyond the sign-up form, the site had deeper structural problems. Plugin bloat was slowing page loads. The UI gave no confidence to a new visitor. And there was no data infrastructure in place, if a customer started signing up and dropped off halfway through, that lead was gone with no way to recover it.

02 - Discovery

Understanding what was broken and what needed to stay

The sign-up flow was the biggest problem. Window cleaning subscriptions require a meaningful amount of information upfront, postcode, property type, number of bedrooms, contact details, payment, and presenting all of it on one page felt overwhelming and untrustworthy to new customers.

 

The key insight was that the information itself wasn’t the problem. Customers were willing to provide it. The presentation was the barrier. Breaking the journey into discrete, purposeful steps, each with one clear job, would make the same process feel manageable.

 

I also identified that the postcode check was critical. Customers needed to know immediately whether the service was available in their area before investing time in a sign-up. Making that the very first interaction, before anything else, removed the risk of completing a form only to be told the service wasn’t available.

03 - Design

A new site in weeks, not months

The first rebuild was a WordPress project, a deliberate choice to get something live quickly while the React version was planned and built. A new custom theme replaced the existing one, unnecessary plugins were stripped back, and the sign-up form was redesigned from the ground up as a multi-step flow.

The original site

What changed

The WordPress rebuild was an MVP by design. The goal wasn’t to build the perfect product, it was to replace something broken with something functional while the longer-term React platform was in development. It went live in early 2024 and immediately started converting better than what it replaced.

Before After

04 - Phase Two: React Rebuild

Owning the product, not renting it

Four to five months after the WordPress launch, the React version went live. The decision to rebuild in React and TypeScript wasn’t about the front-end experience alone, it was about owning the entire stack. WordPress, even with a custom theme, was still a platform with constraints. React meant the product could scale in any direction without hitting those walls.

The most significant addition in the React build wasn’t visible to customers at all, it was the data infrastructure built alongside it. A custom database connected to Retool meant that partial sign-up data could be captured and acted on. If a customer entered their phone number or email address and then dropped off before completing the flow, that information was stored as a warm lead and surfaced to the team for follow-up.

"We realised we were losing leads we'd already earned. Someone willing to enter their phone number is not a cold lead — they're a warm one. The database let us treat them that way."

The React build also gave us complete control over the sign-up flow’s performance and behaviour. Page transitions were instant. The postcode check was faster. The multi-step form could be iterated quickly without touching a theme file or working around platform constraints.

05 - The Sign-Up Flow

Property → Details → Quote → Payment

The sign-up journey was designed around a single principle: earn the customer’s trust one step at a time. Starting with their postcode, rather than their name or card details, put the most useful information first. Customers knew immediately whether the service was available to them before committing any personal information.

1. Postcode first

Customers search their postcode from the homepage or anywhere on the site. They're immediately told whether their area is covered, no wasted effort, no frustration later in the flow. If they're in a serviced area, they then select their property type (flat, semi-detached, detached, terrace) and number of bedrooms (1–2, 3, 4, 5, 6+). These two data points are enough to generate a price.

2. Personal details — and warm lead capture

Name, email address, and phone number. Simple. But critically, in the React build, these details are saved to the database as soon as they're entered, before the customer proceeds to the next step. A customer who drops off here isn't lost. They're a warm lead in Retool, ready for follow-up.

3. Two options, not a menu

Based on property type and bedroom count, the customer is shown two prices: a 4-weekly clean and an 8-weekly clean. The 4-weekly option is slightly cheaper per visit, more frequent, better value. Presenting two clear options rather than a pricing table keeps the decision simple and the path to checkout short.

4. Card details, no charge yet

Testing revealed a consistent insight: customers didn't want to pay for something they hadn't received. The solution was straightforward, card details are collected and saved, but nothing is charged until after the first clean has taken place. This removed the final barrier to completion without creating any operational risk for the business.

06 - Outcomes

Week-on-week growth from both versions

Both rebuilds drove measurable improvement. From the WordPress launch in early 2024, customer numbers increased consistently. By the time the React version went live four to five months later, the platform was in a position to scale without the constraints of a CMS sitting underneath it.

75% week-on-week customer growth

Across both rebuilds, restructuring the sign-up process from a single long form into a guided multi-step flow drove consistent week-on-week increases in completed sign-ups.

Warm lead recovery

The React build's database integration meant partial sign-ups were captured rather than lost. Customers who entered contact details before dropping off became actionable leads in Retool, a conversion opportunity that hadn't existed before.

Speed and scalability

Moving from a plugin-heavy WordPress stack to a custom React and TypeScript build eliminated the performance ceiling. Page loads became near-instant and the product could evolve freely without platform constraints.

Data the business could act on

The Retool integration gave the team visibility over the sign-up funnel for the first time, where customers were dropping off, what lead data had been captured, and which prospects were worth following up.

06 - Reflections

What I took away from this project