From two-page website to a scalable subscription product
Week-on-week customer growth
Rebuilds shipped
React build duration
Week-on-week customer growth
Rebuilds shipped
React build duration
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.
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
- Two pages, no structure
- Single long-form sign-up
- Heavy plugin stack slowing load times
- No postcode validation
- No data capture on drop-off
- Poor mobile experience
What changed
- Custom theme built from scratch
- Multi-step sign-up flow
- Postcode lookup for address finding
- Plugin audit, only essentials kept
- Improved page speed throughout
- Clear, confidence-building UI
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.
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.
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
- An MVP doesn't mean cutting corners, it means choosing the right technology for the moment. WordPress got something live quickly. React got the business somewhere WordPress couldn't take it.
- Postcode first is the right call for any location-dependent service. Qualifying the customer before asking for anything personal builds trust and saves everyone's time.
- The insight that customers won't pay before their first clean sounds obvious in retrospect, but it only emerged through testing. Building time to test assumptions into the process is non-negotiable.
- Warm lead capture is one of the most underrated tools in a sign-up flow. A customer willing to enter their phone number has already made a decision, the database just makes sure you don't lose them before they finish.
- Owning the stack matters more as a product scales. WordPress was fine for an MVP. React and a custom database gave the business room to grow without hitting a ceiling.