Project Details
House Painting Sioux Falls is a real, operating business: interior and exterior painting, cabinet refinishing, carpentry, and welding, owner- operated by Nicholas Pilipchuk since 2016. It is family work, not a paid engagement, and it’s described here the way it actually happened: real deliverables, and honestly, no invented results.
The problem
A small, real business with no marketing budget was invisible to search in a way that had nothing to do with the quality of the work. Two separate gaps compounded each other:
A logo that got clipped. The existing logo had no version built for how ad platforms actually crop art. A square 1:1 slot and a 1200×628 wide slot both cut into it, which meant any ad spend would have run with a visibly broken mark.
A site a search engine couldn’t read. The site was a client-rendered
React single-page app with no server rendering: a real browser saw a full
page, but a crawler fetching the raw HTML found an essentially empty
<div id="root">. Measured directly (fetch the served HTML, strip
<script>/<style>/all tags, count what’s left): about 10 readable
words on the homepage. A better website that Google effectively could
not read was not a website doing its job.
What was built
- Full brand identity: logo design and guidelines, plus non-cropping square (1200×1200) and wide (1200×628) exports generated from the master art so the mark survives Google’s and Meta’s actual ad-slot crops instead of getting clipped mid-shoot.
- A full site rebuild: header with a persistent call/text/estimate action, a hero that states the actual service area and services (Sioux Falls, Tea, Brandon, Harrisburg), real service cards, an owner section with a real photo, an FAQ, and a real project-photo gallery. No fabricated reviews, no invented warranty language, no numbers that didn’t happen.
- Build-time prerendering, so the HTML a crawler fetches carries the full page instead of an empty shell. Measured the same way as the problem: from roughly 10 crawlable words to several hundred, verified by fetching the live, served HTML, not the rendered DOM.
- A dedicated estimate page (
/estimate): one action, message-matched for paid traffic, separate from the homepage, so ad clicks land somewhere built to convert rather than on a general landing page. - A Google Business Profile description, written in the business’s actual voice, scoped to real services and the real service area, kept inside Google’s field limits.
The dedicated /estimate page: real services, a registered-contractor badge, and one action, not the homepage with an ad budget pointed at it.
Verified before it shipped, not assumed
Every page went through the same discipline as any other production deploy here: a real-browser render check (zero failed requests, stylesheets actually applied, no console errors, non-blank after everything settles), and a real device-viewport sweep across phone, tablet, and laptop sizes in both Chromium and WebKit, not just a status code.
Outcome
Everything on this page is live and checkable today: the site is deployed and crawlable, with 364 words of real, indexable content where Google previously saw about ten. The dedicated estimate page gives ad traffic one clear action. The Google Business Profile is claimed, filled in, and written in the business’s own voice. Brand, site, local SEO foundation and ad assets shipped as one engagement, by one person.