Jeremy Sherlock

Rebuilding a cleaning company's website and the lead system behind it

Mopp Cleaning · website rebuild, hosting, and quote-request automation · residential and commercial cleaning

Overview

Mopp Cleaning is a local residential and commercial cleaning company run by a friend and football teammate of mine at UW-River Falls. I noticed their existing Squarespace site was incomplete and poorly built, the kind of site that actively costs a local service business money in lost leads, and reached out on my own initiative. I put together a mock version of a better site and showed it to them. They agreed it was a clear upgrade on the spot, and gave me the green light to build it out fully.

  • ClientMopp Cleaning, River Falls, WI
  • My roleDesign, development, hosting, domain migration, and the lead-generation automation
  • TechnologyHTML, CSS, JavaScript, Netlify, n8n webhook automation
  • Primary objectiveReplace a site that was losing leads with one that generates them
Mopp Cleaning homepage hero: the three-person crew in red in front of a white pickup, with the headline House cleaning in River Falls, simple and spotless, and a Get a Free Quote button
The rebuilt Mopp Cleaning site.

My role and process

I owned this project end to end: design, development, hosting, and the lead-generation system tied to it. I started with the fundamentals, building the site in HTML, CSS, and JavaScript rather than relying on a page builder. I collected professional photos from Mopp Cleaning to use throughout the site, since the quality of the imagery is a direct reflection of a cleaning company's own standards, and pushed back when the first batch wasn't strong enough to use.

The most involved technical piece was the quote request form at the bottom of the site. I intentionally avoided using Netlify's built-in form handling because I wanted the workflow to stay fully under my own control rather than locked into a third-party form product. Instead, I wired the form to a webhook feeding into an n8n automation that I run and pay for continuously. When a homeowner submits a quote request, it automatically emails Mopp Cleaning the request so they can follow up quickly. That pipeline is still what generates leads for them today.

The Mopp Cleaning quote request form with fields for name, email, phone, service type, frequency, address, timeframe, household size, pets, notes, a consent checkbox, and a Send Quote Request button
The quote request form as a customer sees it.
A New Quote Request email to Mopp Cleaning laying out a test submission as a table: name, email, phone, service type, frequency, location, timeline, notes, and a submitted timestamp
The email Mopp Cleaning receives when a quote is submitted (test submission shown).
The n8n workflow: a webhook feeds a honeypot check, sanitize and validate step, validity branch, duplicate lookup against a sheet, then appends a row, emails Mopp Cleaning and the customer, and responds success, with separate responses for bot, invalid, and duplicate submissions
The n8n webhook workflow behind the form.

Decisions and approach

Beyond the build itself, a few decisions mattered:

  • Hosting: I initially considered GitHub Pages, but it wasn't the right fit for a form-driven business site with a custom domain. I settled on Netlify instead.
  • Design and copy: I handled the visual direction and on-page writing myself, since the site needed to read as trustworthy and clean, literally, to convert visitors into leads.
  • Lead automation over a form plugin: Building the webhook and n8n workflow myself instead of using a hosted form tool gave me full visibility into every submission and kept the system extensible for future features.

Because this was a real business collecting customer information, I researched the legal and privacy side of the build on my own. That meant adding a terms of service to the site, a plain-language consent checkbox on the quote form, and making sure the only data stored is what customers actually enter into that form, nothing else. I treated this as seriously as the development work itself: as a freelancer, I wanted it to be essentially impossible for a data-handling issue to come back on either me or Mopp Cleaning.

The same standard applied to the automation. Submissions go from the form to a webhook into an n8n workflow I control and self-host, rather than through a third-party form service, so customer data isn't stored on infrastructure I don't own. Before anything is emailed, the workflow runs a honeypot bot check, sanitizes and validates the input, and looks up the submission ID to reject duplicates.

Challenges

  • Moving the domain. Mopp Cleaning already had their domain registered through Squarespace, and I needed to point it at the new Netlify-hosted site. I went to their office in person and spent about two hours working through DNS routing, propagation, and getting the site properly HTTPS-certified. A cleaning company's domain is tied to their existing branding and reviews; getting the migration wrong risked downtime or broken email and domain services they were already using.
  • Photo quality. Early photo submissions from the client weren't of professional enough quality to represent the business well. I asked for a reshoot before using them on the live site. For a cleaning business specifically, sloppy photography undercuts the exact message the site is trying to send.

Results

  • Mopp Cleaning's online revenue grew by over 300% in the first three months after launch.
  • Site traffic increased by roughly 500%.
  • Mopp Cleaning now ranks #1 locally in River Falls for home cleaning services, and we're actively working on extending that ranking into surrounding markets: New Richmond, Hudson, Ellsworth, and Prescott.
  • The quote-request automation has been running continuously since launch and remains their primary lead source from the site.
  • The work has generated organic word of mouth: other local business owners have complimented Mopp Cleaning on the site, not realizing it was built by a teammate rather than an agency.

What's next

Current work is focused on optimizing Mopp Cleaning's Google Business Profile and broader local SEO, with the goal of showing up not just in traditional search but in AI-assisted search results (ChatGPT, Perplexity, and similar tools) when someone asks who can clean their house locally.

Reflection

Going into this, I had limited real-world experience with web development, and this project taught me that momentum matters more than perfection at the start. I built the foundation, shipped it, and improved it over time rather than waiting until it was flawless. It's still not perfect today, but it's continuously improving, and that mindset, get something working and refine it rather than stalling on the first version, is the biggest thing I took from this project.

Visit the live Mopp Cleaning website to see the completed project.

Visit the Mopp Cleaning site