Skip to content
All work

Client work  · shipped

Dr. Vinyl DFW

A mobile repair franchise in Denton that needed to be found in 68 towns — built as 81 static pages that ship zero JavaScript.

Year
2026
Disciplines
Web design, local SEO, performance
Stack
AstroTypeScriptTailwindStatic

The brief

A trade business does not lose jobs on the pitch. It loses them on the search.

Dr. Vinyl DFW repairs leather, vinyl, plastic and upholstery on cars, RVs, restaurant seating and homes — mobile across North Texas, or at the workshop in Denton. Jacob Morris had the reputation and the crew; what he did not have was a site that turned somebody searching "leather repair near me" two counties away into a text with two photos attached. The brief was the whole funnel: be findable in every town he covers, prove the work on sight, and put the customer through to a technician rather than a form.

What we built

  1. 01

    68 city pages that are not copies of each other

    Every town in the service area gets its own page, generated from coordinates: the real distance and direction from the Denton workshop, which covered towns it actually sits between, and whether its county is full or partial coverage. Near-duplicate location pages get treated as thin content — these each carry facts only that page can say.

  2. 02

    Proof you can drag

    The gallery is Jacob's own job photos in before/after pairs with a drag-to-compare slider. The importer proposes pairings rather than assuming them, refuses to publish an untitled pair, and strips EXIF — phone photos taken in customers' driveways carry GPS coordinates, and those must not ship.

  3. 03

    No form. On purpose.

    The client did not want a contact form, so there is not one. Every call to action is a real tel:, sms: or mailto: link, and "Contact" goes to a team page where each technician lists their own number. The quote path is two photos by text, straight to the person who will do the work.

  4. 04

    Zero JavaScript bundles

    The compare sliders, slideshow, counters, cursor-tracked previews and mobile menu are inline scripts of one to three kilobytes a page. No framework, no hydration, nothing to download and parse before the page works — which is the whole game on a phone with one bar in a parking lot.

  5. 05

    Structured for the local pack and for AI answers

    AutoRepair and LocalBusiness schema sitewide, with Service, FAQPage and BreadcrumbList on the pages that earn them. Self-hosted variable fonts, so no Google Fonts request and no layout shift. Reduced motion is a first-class path, not an afterthought.

Screens

  • The homepage — a live before/after compare in the hero, and a quote path that is two photos by text rather than a form.
    The homepage — a live before/after compare in the hero, and a quote path that is two photos by text rather than a form.
  • Real job photos in drag-to-compare pairs, filterable by damage type. EXIF is stripped on import so no customer address ships with a picture.
    Real job photos in drag-to-compare pairs, filterable by damage type. EXIF is stripped on import so no customer address ships with a picture.
  • One of 68 city pages. The county, the distance from the workshop and the direction are computed per town, so no two read alike.
    One of 68 city pages. The county, the distance from the workshop and the direction are computed per town, so no two read alike.
  • A service page: surfaces, damage types, process and FAQ, carrying its own Service and FAQPage schema.
    A service page: surfaces, damage types, process and FAQ, carrying its own Service and FAQPage schema.

Where it stands

Live at drvinyldfw.com, serving Denton, Collin, Dallas, Tarrant, Rockwall and Johnson counties. The whole site is static — it rebuilds in under two seconds and deploys anywhere. Adding a technician, a service or another town is one entry in a data file, not a redesign.

City pages, each with its own facts
68 City pages, each with its own facts
Kilobytes of JavaScript shipped
0 Kilobytes of JavaScript shipped
Build time for all 81 pages
1.35s Build time for all 81 pages

Next case

manncavemedia.com

Read it →