Where we started
Jakob runs Gutter-It, a seamless-gutter business in Chattanooga — cleaning, repair, installation, and pressure washing. He had a real brand: a clean shield logo, a navy-and-sky-blue color palette, a printed banner with three crisp value props. None of that made it onto his website.
His Wix site was a flat list of four services on a solid blue background — "Gutter Cleaning · as low as $100 · Book Now" repeated four times, with a typo on "Pressure Wahsing." Below that, a generic "Our Commitment" paragraph. No hero. No real about page. No trust signals. No SEO. Nothing that told a prospect why they should call Jakob instead of the next gutter guy on Google.


What we built
- Five-page custom site — Home, Services, Gallery, About, Contact — built in React with Vite, fully typed in TypeScript, and styled with a custom Tailwind palette pulled from his existing brand (navy, sky, amber, electric blue, cream).
- Real service detail — replaced the four-line price list with proper service cards: what's included, what it costs, clear CTAs. Pricing stays up front so callers self-qualify before they pick up the phone.
- Trust signals on the hero — "Chattanooga · Family-Owned" eyebrow, licensed & insured, free estimates, and a 5-year workmanship warranty all visible without scrolling.
- Accessible components — Radix UI primitives for the FAQ accordion and base components, so keyboard and screen-reader users get a working site, not an afterthought.
- SEO baked in — every page is pre-rendered to its own static HTML file at build time, so Google, Bing, DuckDuckGo, and Apple all see the full content on first crawl with zero JavaScript required.
- Google Business Profile — one-time setup of his GBP: categories, service area, hours, services, photos, and the basics that decide whether he shows up in the local map pack.
The stack
- React 18 + Vite + TypeScript — fast dev loop, strict types, no surprises in production
- Tailwind CSS with a brand-matched palette so the site actually looks like Gutter-It, not a template
- React Router v6 for the five pages
- Radix UI for accessible accordion and base primitives
- react-helmet-async for per-page SEO + JSON-LD
- Lucide React for icons
How we made it findable
A pretty site that no one can find isn't worth much. Most React sites are single-page apps — when Google crawls them, the raw HTML is essentially empty until JavaScript runs, which means slower indexing and other crawlers (Bing, social previews, AI agents) often see nothing at all. We didn't ship Jakob a site like that.
Every route is pre-rendered at build time — /, /services, /gallery, /about, and /contact each get their own static .html file with the full content already in the markup. Google sees the page on first crawl with no JavaScript required, and so does every other crawler.
On top of that:
- Per-page metadata — unique
<title>, meta description, and canonical URL for each of the five pages - LocalBusiness JSON-LD schema — name, address, phone, hours, service area, and the four services all marked up so Google recognizes Gutter-It as a real local business entity
- Local keyword copy — Chattanooga plus all ten surrounding Hamilton County towns named in the body so the site shows up when prospects search nearby
- Image alt text on every photo so they're indexable in Google Images
- Auto-generated sitemap.xml + robots.txt submitted to Google Search Console
That's the website side handled. The other half of local search is the Google Business Profile — categories, service area, hours, photos, and the basics that decide whether a business shows up in the map pack when someone Googles "gutter cleaning near me." We set Jakob's up as a one-time engagement; from here, the website and the GBP work together.
The result
A site that matches the brand on Jakob's banner, loads fast on a phone, and tells prospects exactly what they're buying before they call. Paired with a real Google Business Profile, he now has the two things a local trades business actually needs to grow: a site that closes, and a listing that gets found.


