Back to All Work
Lead Generation · Full Website Build

Jetts Windows Zero to #1

A local window installation company with no online presence. We built them a site that generates 40+ organic leads per month, ranks #1 for 8 local keywords, and cost $0 in ad spend.

jettswindows.com
40+
Leads / Month
#1
Local Rankings
$0
Ad Spend
12%
Form Conversion
The Live Site

Built to convert.
Designed to rank.

Jetts Windows protection plans pricing
Jetts Windows quote request form
Jetts Windows mobile homepage
Jetts Windows mobile navigation

jettswindows.com — Live since 2024

The Challenge

Jetts Windows had been running for years on word-of-mouth alone. No website, no Google listing, no digital footprint whatsoever. Meanwhile, competitors with mediocre work were winning bids simply because they showed up on Google.

The owner didn't need a "pretty website." He needed a machine that turns local searches into booked appointments. Fast load times, no friction, no fluff.

They were invisible online. Every day without a site meant lost leads going straight to competitors.

Our Approach

We didn't start with wireframes. We started with keyword research. Before writing a single line of code, we mapped every high-intent search term in their service area: "window installation near me," "window replacement [city]," "vinyl windows [county]."

Then we built a site engineered for one purpose: capture local leads as fast as possible. Every design decision, every piece of copy, every technical choice was made to reduce friction between "I need windows" and "appointment booked."

Mobile-first wasn't just a buzzword here. 67% of their traffic comes from phones. The entire quote request flow completes in under 30 seconds.

Tech Stack

Built on a modern stack.
Optimized for speed.

Every tool chosen for a reason. No bloat, no legacy baggage, just the right technology for a site that needs to be fast, editable, and reliable.

N16

Next.js 16

React Server Components, partial prerendering, and the App Router. Pages load in under 1.4 seconds on mobile. Static generation for service pages, dynamic routes for location-targeted content.

React 19 · App Router · Server Components · ISR
S

Sanity CMS

Structured content that the client can actually update. Service descriptions, testimonials, and project galleries all managed through a custom Studio. Real-time preview so they see changes before publishing.

GROQ Queries · Real-Time Preview · Custom Studio · CDN

Vercel

Edge deployment with automatic CI/CD. Every push to main triggers a build. Preview deployments for every PR. Global CDN ensures sub-second TTFB regardless of visitor location.

Edge Network · Preview Deploys · Analytics · Speed Insights
SEO

Local SEO Engine

JSON-LD schema markup for local business, services, and reviews. Google Business Profile optimization. Location-specific meta tags and Open Graph data generated dynamically per service area.

Schema.org · JSON-LD · GBP · Structured Data
TW

Tailwind CSS

Utility-first styling with zero unused CSS in production. Responsive breakpoints tuned for the exact devices their customers use. Dark mode ready, though this site keeps it clean and light.

JIT Compiler · Custom Config · Responsive · Purged CSS
A

Analytics + Tracking

Vercel Analytics for performance monitoring. Google Search Console for keyword tracking. Custom conversion events on every form submission, phone tap, and map click. Data-driven from day one.

Vercel Analytics · Search Console · Core Web Vitals
Rotor

Rotor Integration

We partnered with Rotor to integrate their system directly into the Jetts Windows quote form. Leads flow straight from the website into the client's existing workflow — no copy-paste, no missed inquiries.

Lead Routing · Form Integration · Automated Workflow
Deep Dive

How we built it.
Step by step.

Sanity CMS: Content the Client Controls

Why Sanity

Most local business sites die slow deaths because the owner can't update them. Sanity changes that. We built a custom Studio tailored to Jetts Windows, not a generic CMS with 400 features they'll never touch.

The client manages their own content: services, project galleries, testimonials, service areas, and business hours. No developer needed for day-to-day updates.

What We Configured

  • Custom document types for Services, Projects, Testimonials, and Team
  • Image pipeline with automatic optimization and responsive sizing
  • Portable Text for rich service descriptions with embedded CTAs
  • Real-time content preview through Next.js Draft Mode
  • Structured content that feeds directly into JSON-LD schema markup
  • Slug generation and validation for SEO-friendly URLs

Next.js 16: Performance Without Compromise

Architecture Decisions

We used the App Router with React Server Components to minimize client-side JavaScript. Service pages are statically generated at build time with ISR (Incremental Static Regeneration) so content updates go live without a full redeploy.

The quote request form is a Client Component, keeping the interactive parts isolated while the rest of the page ships as zero-JS HTML.

Performance Wins

  • 1.4s mobile page load (Lighthouse 95+ performance)
  • Server Components eliminate unnecessary client bundles
  • Image optimization with next/image and Sanity's CDN
  • Partial prerendering for instant navigation between pages
  • Metadata API for dynamic, per-page SEO tags
  • Route groups for clean code organization

Vercel: Deploy, Monitor, Iterate

Deployment Pipeline

Every commit to the main branch triggers an automatic production deployment. Feature branches get their own preview URLs, so we can share progress with the client before anything goes live.

Rollbacks are instant. If something breaks at 2 AM, one click restores the previous deployment. No downtime, no panic.

What Vercel Gives Us

  • Edge network with 30+ global PoPs for sub-second TTFB
  • Preview deployments for every pull request
  • Vercel Analytics tracking real-user performance metrics
  • Speed Insights identifying bottlenecks per page
  • Automatic HTTPS and custom domain management
  • Serverless functions for form handling and API routes

Local SEO: From Invisible to #1

The Strategy

We didn't just sprinkle keywords on a page. We built a systematic local SEO engine. Every service page targets a specific cluster of high-intent keywords. Location pages are generated for each service area. Schema markup tells Google exactly what this business does and where.

Within 3 months, Jetts Windows ranked #1 for 8 local keywords with zero ad spend.

Technical SEO Implementation

  • JSON-LD LocalBusiness schema on every page
  • Service-specific schema markup with pricing ranges
  • Automated XML sitemap generation via Next.js
  • Dynamic Open Graph images for social sharing
  • Google Business Profile fully optimized and linked
  • Internal linking structure designed for crawl efficiency
  • Core Web Vitals all passing in green

Lead Generation: The 30-Second Funnel

The Flow

Most contractor websites bury the contact form on a separate page. We put a streamlined quote request on every single page. Three fields, one button, done. The form auto-detects the service they were viewing and pre-fills it.

On mobile, a persistent "Get a Quote" button floats at the bottom of the viewport. One tap, fill name and phone, submit. Under 30 seconds from "I need windows" to "appointment requested."

Conversion Optimization

  • 12% form conversion rate (industry avg: 2-5%)
  • Multi-step form reducing perceived complexity
  • Service auto-detection from page context
  • Mobile-persistent CTA with smart positioning
  • Instant email notification to the business owner
  • Form submissions tracked as conversion events
  • A/B tested CTA copy and button placement
Results

The numbers
speak for themselves.

#1
8 Local Keywords
Top of Google Maps + organic
40+
Leads / Month
All organic, zero ad spend
12%
Form Conversion
Industry average: 2-5%
1.4s
Mobile Load
Lighthouse 95+ performance
67%
Mobile Traffic
Designed mobile-first
$0
Ad Spend
Pure organic growth
95+
PageSpeed Score
All Core Web Vitals green
<30s
Quote Request Time
From landing to submission
Project Timeline

From kickoff to #1.
Here's how it happened.

WK 1

Discovery + Research

Keyword research across all service areas. Competitor analysis. Content strategy mapping. Defined the exact pages and structure needed to rank for high-intent local searches.

WK 2

Design + Sanity Setup

Mobile-first UI design. Set up Sanity Studio with custom document types. Built the content model for services, projects, and testimonials. Client started adding content immediately.

WK 3

Development + Integration

Next.js 16 build with App Router. Sanity integration with GROQ queries. Form handling with serverless functions. Schema markup implementation. Vercel deployment pipeline configured.

WK 4

Launch + Optimization

Production deployment on Vercel. Google Business Profile setup. Search Console submission. Performance optimization pass. Analytics and conversion tracking configured.

MO 3

Results: #1 Rankings Achieved

Within 3 months, ranking #1 for 8 local keywords. 40+ organic leads per month. 12% form conversion rate. The site was paying for itself many times over.

Under the Hood
jettswindows / app / layout.tsx
// Next.js 16 + Sanity + Vercel
import { draftMode } from 'next/headers'
import { sanityFetch } from '@/sanity/lib/fetch'
 
export default async function RootLayout({ children }) {
  const { isEnabled } = await draftMode()
  const settings = await sanityFetch({ query: settingsQuery })
 
  return (
    <html lang="en">
      <body>
        {isEnabled && <DraftBanner />}
        <Header settings={settings} />
        {children}
        <QuoteFormPersistent />
      </body>
    </html>
  )
}
Want results like this?

Let's build your
lead machine.

Tell us about your business. We'll show you exactly how we'd get you ranking and converting, in plain English.

Start the Conversation →