Apple Off Road — Retooling Specification
Goal (owner's words): outperform all competition within 100 miles across copy, schema, site speed & page vitals, tracking, design, and marketing fundamentals.
Version: 1.0 · 2026-07-16
Ground truth inputs: spec/research/competitors.md (verified 15-shop recon), spec/research/baseline.md (our measured baseline), project CLAUDE.md.
Scope guard: This is a conversion/marketing/tech retool of the live Night Shop design. Not a redesign. Ecommerce stays out of scope — the site's one job is quote requests for installation and build work.
1. Executive summary & competitive thesis
Current state
The new Night Shop site is technically excellent (17.5KB homepage, 47ms TTFB, static Cloudflare Pages, LocalBusiness schema live) but commercially inert: the quote form doesn't submit, there is zero tracking, one unverifiable testimonial, no pricing, no financing, no fitment tooling, and no local-SEO footprint beyond one Elkton page. It's a fast brochure.
The thesis
Nobody within 100 miles has assembled the full stack. The three real threats each hold one piece:
- No Limit (Baltimore, ~45mi) owns brand + social proof (466 reviews/4.8, celebrity builds, text-to-quote, financing, visualizer) — but is wheel/tire-led and 45 miles away.
- Rhino Linings of Delaware (Newark, ~13mi) is nearest with the deepest suspension brand roster — but off-road is diluted among bedliners, tint, and accessories.
- Mount Zion Offroad (Dover PA, ~60mi) has the biggest dedicated-shop review base (4.8/479) — but thin conversion tooling and it's an hour away.
Our play: be the only shop in the radius that combines (a) a national-tier website — fitment finder, multi-step quote flow, live review proof, a straight-quote process, financing math — with (b) a 10-minutes-from-I-95 Elkton install bay. The national leaders (Custom Offsets, ExtremeTerrain, TrailBuilt) prove buyers respond to fitment tools and financing — but they can't install your truck. The locals can install — but their websites are quote-only black boxes (one, Trick Trucks, with documented over-quoting complaints). We take the national playbook and bolt it to a local lift.
Three wedges, each grounded in the recon's 12 gaps:
- Straight-quote wedge — a free, itemized, written quote that holds, plus plainly-stated workmanship coverage, against a field that is 100% quote-only and silent on what's actually covered (gap #6, #12). Answers the fear behind Trick Trucks' $1,600-unneeded-lift complaint without publishing our price book. We do not publish install prices (owner decision, 2026-07-16): every rig, kit, and platform prices differently, and a public floor invites both anchor-shopping and "but the website said $X" fights at the counter. The wedge is how we quote, not what we charge.
- Tooling wedge — fitment finder + gated quote flow + financing "$X/mo" (gaps #1, #2, #3). No local shop has any of the three together; only Intercourse (45mi, dated CMS) has booking + Synchrony.
- Proof wedge — live Google review bar + filterable real-build gallery (gaps #4, #5). Harford Tire has 5.0/353 and buries it on SureCritic; we surface ours on every page, live.
Measurable definition of "outperform within 100 miles"
We win when, verified against the named competitors:
| Dimension | Test | Beats |
|---|---|---|
| Speed | Mobile PSI performance ≥ 95, LCP ≤ 1.8s p75 | Every competitor (Wix/Shopify/tire-CMS stacks) |
| Social proof | Live ★/count review bar on every page + review schema | Harford (buried SureCritic), No Limit (static) |
| Conversion tooling | Fitment finder + 4-step quote flow + financing $/mo live | Intercourse (booking only), No Limit (text-to-quote only) |
| Quote process | Free itemized written quote (parts vs. labor), honored 30 days, no mid-job upsells — stated on every service page | Entire field (quote-only black boxes, terms unstated) |
| Schema | Service + FAQ + Review + Breadcrumb graph, 0 errors in Rich Results Test | All locals (LocalBusiness-or-nothing) |
| Tracking | quote_submit conversion measured end-to-end, GA4+Ads wired | Unknowable for them; non-negotiable for us |
| Local SEO | Rank page-1 for "lift kit installation {Elkton, Newark DE, Bel Air}" | East Coast Off Road (no web presence), Rhino (diluted) |
Acceptance criteria (section 1)
- Every section below ships with its own criteria met; the §12 scorecard is the roll-up.
- The homepage's primary CTA path (hero → quote flow → submitted quote → email in inbox → GA4 conversion) works end-to-end on a phone.
2. Marketing fundamentals — the 4 P's
2.1 Product — package the install work
Current state: Services exist as SEO-ish pages (lift-kit installation, wheel-and-tire packages, LED kits, suspension, parts) with no packaging, no tiers, no named offers. "Kits / Wheels / Lights / Merch" tiles all dead-end at the same generic form.
Target: A named, tiered service menu a buyer can self-select from — the way Custom Offsets productizes fitment, applied to installs. Nobody local packages installs; Rhino sells parts, No Limit sells "custom," tire shops sell tires.
Concrete changes:
- Define six core install products, each with its own page section, price floor, and quote-flow preselect:
- Level It — leveling kit, installed + alignment. Entry product; highest volume intent.
- Lift It — 2–3.5" lift kit, installed + alignment.
- Big Lift — 4–6" lift kit, installed + alignment + driveline check.
- Wheels & Tires — package: wheels + tires + mount/balance + TPMS + lug re-torque.
- Light It Up — LED bars/pods/whips, wired on a relay/switch, installed clean.
- The Full Build — lift + wheels/tires + lighting + accessories, staged as one work order.
- Every product block states: what's included, typical bay time ("in the morning, out by close" where true — owner confirms), the quote promise (§2.2), and a Start Your Build button that opens the quote flow with that product preselected. No price floor — packages are defined by scope, not by a number.
- Add custom fabrication as a distinct capability page (bumpers, sliders, wiring, one-offs) — this is the "we're a real shop, not an installer of boxes" differentiator vs. tire chains (Delaware Tire, Bay Area Point S, Sports Car Tire).
- The "Merch" tile leaves the homepage product grid (ecommerce is dead; it dilutes the install story). Merch link can survive in the footer if the owner wants it, pointed wherever merch actually lives.
Acceptance criteria:
- 6 named packages live on
/and on their service pages, each with included-items list and preselecting quote-flow CTA. - Custom fab has a dedicated page with ≥ 3 real fab examples (photos).
- Merch removed from the homepage conversion path.
2.2 Price — the straight-quote wedge
Current state: Zero prices anywhere. Old store had prices missing on a third of items; dead now.
Target: The field is 100% quote-only (gap #6), and the segment carries trust damage — Trick Trucks has a documented complaint of quoting a $1,600 lift the customer didn't need. The buyer's fear is not "what does it cost?" — it's "will I get worked over?" We answer the fear, not the price.
Owner decision (2026-07-16): we do not publish install prices. Every rig, kit, and platform prices differently; a published floor invites anchor-shopping, "but the website said $X" fights at the counter, and forces the shop to defend a number set months earlier against moving parts costs. The wedge is how we quote, not what we charge — and it beats the field on the same gap, because nobody local states their quote terms either.
Concrete changes:
- The quote promise, stated plainly on the homepage, every service page, and inside the quote flow:
"Free written quote, itemized — parts and labor, line by line. We quote before we wrench, and the number we quote is the number you pay. If we find something mid-job, we stop and call you. Your quote holds for 30 days."
[OWNER: confirm the 30-day quote window and the stop-and-call threshold — shop policy currently allows up to 2 hrs additional custom-work labor without a call.] - Reconcile with the real policy. The existing shop policy allows up to 2 hours of extra custom-work labor without calling the customer. Either (a) the site says "we call before any additional labor" and the shop honors it, or (b) the site states the real threshold. Never publish (a) while operating (b) — that's the exact trust break we're attacking.
[OWNER: pick one.] - What's included, not what it costs. Each package block earns trust with scope instead of a number: parts, labor, alignment, TPMS, road test, re-torque — the itemized list is the transparency.
- No
pricing.ts, no price floors, no published build sheet. Ballpark questions route to the quote flow and the phone, where a human can qualify the rig. - Financing shows a representative example only, never a per-package price (§10).
Acceptance criteria:
- Quote promise live on
/, all 6 package blocks, all service pages, and quote-flow Step 1. - Site-wide grep: zero
$price figures for install work anywhere indist/. - On-page quote terms match written shop policy exactly (owner-verified, item 2 resolved).
- Every "how much?" surface has a path to quote flow or phone within one tap.
2.3 Place — Elkton + the Mid-Atlantic footprint
Current state: One location, correctly NAP'd in schema, "behind Apple Mitsubishi" callout, one legacy truck-lifts-elkton page. No presence targeting the towns competitors actually sit in.
Target: Own the I-95 corridor gap. Elkton sits between Rhino/Delaware Tire's Newark DE turf (13–15mi) and Harford/Bay Area/East Coast Off Road's Harford County turf (28–30mi) — and East Coast Off Road, the closest dedicated off-road installer, has essentially no web presence (recon: "beatable on nearly every search").
Concrete changes:
- City-level service pages (full spec in §9): Elkton/Cecil County, Newark DE, Bel Air MD, Wilmington DE, Middletown DE, Aberdeen/Havre de Grace, Rising Sun/North East.
- Homepage and every city page state drive-time proximity ("10 minutes from Newark, right off Pulaski Hwy/US-40, 5 minutes from I-95 exit 109") — the recon shows distance is the field's weakness (Mount Zion 60mi, No Limit 45mi).
- "Behind Apple Mitsubishi" stays prominent (real wayfinding + implies dealership-grade facility, insurance, and alignment equipment — the exact claim Duffy's trades on).
- GBP optimization (§9.3) is the other half of Place.
Acceptance criteria: rolled into §9.
2.4 Promotion — offers, financing, seasonal
Current state: No offers, no financing, no seasonal anything. One county-fair-raffle page (legacy).
Target: Only Intercourse and No Limit surface financing (gap #2); no local shop runs a structured seasonal calendar. We do both.
Concrete changes:
- Financing front-and-center (§10): "$X/mo" under every package,
/financingpage, nav presence. - Standing offer: "Free fitment check + written quote — 30 minutes, no obligation." Costs nothing, gets trucks into the lot, feeds the quote pipeline.
- Seasonal calendar (4 promos/year, one data-file toggle each, homepage banner slot):
- Spring (Mar–May): "Mud season prep" — lift + tire packages.
- Summer (Jun–Aug): "Beach & trail ready" — wheels/tires, lighting.
- Fall (Sep–Nov): "Hunting season" — lighting packages, leveling.
- Winter (Dec–Feb): "Build-season layaway/financing" — book the winter build, 0-money-down financing angle.
- Promo banner is a single
PromoBanner.astrocomponent driven bysrc/data/promo.ts(start/end dates, copy, CTA target) so switching seasons is a one-line change and never a redesign. - Every promo carries a UTM-tagged CTA into the quote flow so §8 can attribute it.
Acceptance criteria:
- Financing visible on homepage + all package rows (once program live).
- Promo banner component live with one active seasonal offer at launch.
- Promo → quote submissions attributable in GA4 (campaign param present on quote_submit).
3. Social proof
Current state: One anonymous-quality testimonial ("Tim Jones, Rockville MD") with no source. Six-photo static build strip with captions. "Certified Rough Country dealer" appears as text in the footer/chips. No review count, no stars, no schema. Meanwhile Harford Tire holds 5.0/353, Mount Zion 4.8/479, No Limit 4.8/466 — and per the recon, all of them fragment or bury it (gap #5).
⚠️ Live-site liability (fix on sight): truck-lifts-elkton and the lift-kits page currently claim "Warranty-covered parts and labor for up to 3 years or 36,000 miles." This contradicts the shop's own published policy (1-year labor warranty; no parts warranty from Apple Off Road — parts carry the manufacturer's; re-gear 3 months). It is an unbacked warranty claim sitting live on a customer-facing page. Remove in the P0 copy pass — this is not a spec proposal, it's a correction.
Target: The only site in the radius showing a live "4.x★ · N Google reviews" bar on every page, backed by schema and real trucks. We don't need to out-count Mount Zion's 479 on day one — we need to out-display everyone.
Concrete changes:
Live Google reviews bar — reviews-service pattern. Onboard Apple Off Road as a tenant of the existing
spm-reviewsCF Worker (the same system live on Apple Honda's homepage:GET /v1/{slug}/reviewsJSON +/v1/{slug}/embed, KV-cached 48h, daily cron, GBP API via the analytics service account). New tenant slugapple-offroad.[OWNER: confirm Apple Off Road's own GBP listing exists (separate from Apple Mitsubishi) and grant manager access — §11.]- Placement: slim bar directly under the hero H1 ("★ 4.x · N Google reviews · Elkton, MD" → links to the Google reviews panel), and a fuller 3-review rotating strip replacing the current single testimonial band (Bay 03).
- Fails soft: if the Worker is unreachable, the bar renders nothing (no layout shift — reserve zero height, it's an enhancement).
Real testimonials. Replace "Tim Jones" with 3 curated verbatim Google reviews (name, star rating, relative date) pulled from the same feed — verifiable proof, not marketing copy.
Build gallery upgrade (
/builds-gallery/): from a 6-photo strip to a filterable gallery of real customer trucks. Each entry is a markdown/JSON record: photo(s), year/make/model, lift height, wheel/tire spec, work performed, optional before/after pair. Filters: vehicle make, work type (lift/wheels/lighting/fab). Only No Limit does this locally (gap #4); ours adds the spec sheet per truck, which nobody does.- Seed content: the 6 existing build photos + recover the 4 dead homepage slider images from the Apple Off Road Facebook page (filenames are FB exports — Meta Graph API,
[OWNER/us: FB page access]), then a standing intake habit: 2 photos + spec per completed build.
- Seed content: the 6 existing build photos + recover the 4 dead homepage slider images from the Apple Off Road Facebook page (filenames are FB exports — Meta Graph API,
Rough Country certified-dealer proof block: dedicated homepage module + the existing
/apple-offroad-is-a-rough-country-performance-dealerpage tightened — RC badge, what "certified" means for the customer (trained install, warranty honored locally, genuine parts). Beats Duffy's single-brand claim by pairing it with the multi-brand wall (§4.4).Our workmanship, in plain English (gap #12): the shop already has a real 1-year labor warranty — it's buried in
/shop-policiesin all-caps legalese. The win is stating the existing commitment clearly and bounding it honestly, not inventing a bigger one.Canonical text (mirrors shop policy — do not expand):
Our work, warrantied. Every install leaves torque-spec'd, alignment-checked, and road-tested. If something we installed comes loose or wasn't installed right, bring it back — we fix our workmanship free for one year. Your free 500-mile nut-and-bolt check keeps that coverage active.
What that doesn't cover: parts carry their manufacturer's warranty, not ours — we'll file the claim for you. Trail damage, impacts, accidents, and hard off-road use aren't workmanship — they're off-roading. Re-gear work is warrantied 3 months; bearings and gears are excluded from the labor warranty. Full terms: /shop-policies.
Framing rule (non-negotiable): this is a workmanship warranty, never an "install guarantee," never "we stand behind it" unqualified, never a promise about how the vehicle survives the trail. The customer who rolls their Jeep on Saturday must not be able to read this page and believe we owe them a rebuild.
Renders as a homepage module +
/warrantypage (not/guarantee) + one line inside the quote flow, each linking to/shop-policiesas the controlling terms.[OWNER: approve — this restates existing policy; confirm the 500-mile check is positioned as free-and-required, since policy voids labor warranty without it.]
Acceptance criteria:
- Live review bar renders real GBP data on every page; value matches Google Maps within the 48h cache window.
- Homepage testimonial band shows ≥ 3 named, dated, real Google reviews.
- Builds gallery: ≥ 10 real builds with vehicle + spec metadata, filters functional on mobile.
- Workmanship warranty live in 3 places (homepage,
/warranty, quote flow), each linking/shop-policies, with owner-approved terms. - Exclusions (parts/manufacturer, trail damage, re-gear 3mo, bearings/gears) appear wherever the coverage does — never coverage without limits.
- Zero unbacked warranty claims sitewide: grep
dist/for "3 years", "36,000", "guarantee" — each hit reviewed against shop policy. - Review count baseline recorded at launch; §9.3 review-generation loop targets +8/month.
4. UI/UX & design — the conversion architecture
Current state: Night Shop is a strong aesthetic (near-black, zuume-edge display type, brand red #D83135, "Bay 01/02/03" stencil rhythm) with a weak conversion skeleton: hero → static 5-field form; every CTA on the site anchors to #quote; the tiles say "Shop Online — Ship to Store" (dead concept); the brand marquee is decorative; nav has no CTA differentiation.
Target: Keep the Night Shop skin, rebuild the spine: hero → Start Your Build (gated multi-step) → fitment finder → proof → book. The pattern to beat is No Limit's text-to-quote (low friction but zero qualification) and Intercourse's online booking (functional but dated) — we combine qualification AND booking in one flow, styled like a work order, which is already Night Shop's visual metaphor.
4.1 The "Start Your Build" quote flow (gap #3) — the site's core mechanism
Replace the static hero form with a 4-step gated flow. Vanilla TS (no framework), one island, state in memory + sessionStorage (survives accidental nav), renders inside the existing ns__quote work-order card.
- Step 1 — Your rig: Year / Make / Model (select inputs fed from the fitment dataset §4.2) + trim/notes free text. This is the hero-visible step — a 3-select + button card, lower friction than the current 5 required fields.
- Step 2 — The goal: multi-select cards w/ icons: Leveling · Lift · Wheels & Tires · Lighting · Full build · Custom fab · "Not sure — help me spec it." (Preselected when entered from a package CTA.)
- Step 3 — Budget & timing: budget band (radio: <$1.5K / $1.5–3K / $3–6K / $6K+ / "quote me") + timing (ASAP / this month / this season / researching) + financing interest (yes/no → feeds §10).
- Step 4 — Contact & book: name, phone, email, preferred contact (call/text/email), preferred drop-off week (date-ish select, not a hard calendar in v1), honeypot. Submit.
- Progress indicator styled as work-order stages ("SPEC → GOAL → BUDGET → BOOK"). Back navigation preserved. Each step advance fires
quote_step(§8). - Submission: POST to
/api/quoteCF Pages Function → SendGrid →OFFROAD@appleelkton.com(+ BCC Sean during testing) with a formatted work-order email containing every field; auto-response to the customer ("We'll call you within one business day"[OWNER: confirm SLA]). Same CF-Function→SendGrid pattern as bailey-leadership/frontline-gs. Turnstile on submit (invisible mode). - Thank-you state routes to
/thank-you-for-contacting-apple-off-road(exists) — rebuilt to show: what happens next (3 steps), phone number, and the guarantee. This page is the GA4 conversion surface. - The contact page's simple form (ContactBody/QuoteForm) stays for general inquiries but posts to the same Function with
form_name=contact.
4.2 The vehicle FITMENT FINDER (gap #1) — the #1 leapfrog
No shop within 100 miles has one; Custom Offsets built a national business on theirs. Ours is scoped to what an install shop needs: "What fits my truck, what does it clear, what does it cost installed?"
- Data: static JSON dataset (
src/data/fitment/*.json), compiled from the Rough Country application guide we're certified on (plus wheel-brand fitment where easy). Per vehicle (year-range/make/model): available lift/level options (height, product line), max tire size stock vs. at each lift height, notes (e.g., "requires knuckle kit"), and the matching package price floor frompricing.ts. - Scope v1: top 25 platforms by local demand — F-150, F-250/350, Silverado/Sierra 1500 & HD, Ram 1500/2500, Tacoma, Tundra, 4Runner, Wrangler JK/JL, Gladiator, Bronco, Ranger, Colorado/Canyon, Frontier, Titan, Jeep XJ/TJ.
[OWNER: sanity-check the platform list against what actually rolls into the bay.]Dataset is additive — a platform is one JSON file. - UX:
/fitment/page + embedded module on lift/wheel service pages. Three selects → instant results card: "Your 2021 F-150 — stock clears up to 33s. With our 3.5" Lift It package: 35s. With the 6" Big Lift: 37s." → CTA "Quote this exact setup" → enters the quote flow at Step 2 with vehicle + implied goal prefilled. The card answers what fits, never what it costs — fitment is the hook, the quote is the answer. - Every use fires
fitment_usewith vehicle params (§8). - Client-side only, zero network calls, works offline once loaded. Budget: ≤ 15KB gz JS + lazy-loaded JSON per make.
- Honesty rule: the finder shows ranges from the manufacturer's application guide and says "final fitment confirmed at your free fitment check" — it's a qualifier and appointment-driver, not a promise.
4.3 Homepage information architecture (revised bay order)
- Hero — H1 (§5) + live review bar + quote flow Step 1 card. Keep the wheels hero image, add fetchpriority (already present).
- Trust chips row — Certified Rough Country Dealer · Free 500-mi re-torque · Financing available · Behind Apple Mitsubishi.
- Packages (Bay 02) — the 6 products, each with its included-items list and a Start Your Build CTA (replaces "Shop Online — Ship to Store" tiles; kills the dead ecommerce framing). Scope sells the package; no prices, no $/mo.
- Fitment finder teaser (Bay 03) — "What fits your truck?" inline 3-select module.
- Proof (Bay 04) — 3 live Google reviews + link to all.
- Builds (Bay 05) — existing gallery grid, now linking into the filterable gallery.
- Guarantee + RC certification (Bay 06) — the two trust modules.
- HQ / find us (Bay 07) — existing Shop Headquarters section (map embed optional, static image preferred for CWV).
- Closer — "You're Up Next." (keep — it's good) → quote flow.
4.4 Functional brand wall (gap #9)
The marquee stays visually, but every logo becomes a link: wheel brands → builds gallery filtered to that brand (or the wheel-tire service page anchor), Rough Country → the certified-dealer page. Add title/aria-label per link. Rhino's brand roster is a text list; No Limit's is decorative — ours becomes navigation.
4.5 Mobile-first & accessibility
- All flows designed at 390px first; quote flow steps fit one viewport with the keyboard open (test iPhone SE + mid-range Android).
- Sticky mobile action bar (mobile only, appears after hero scroll):
[📞 Call][Start Your Build]. Buyers search on phones (gap #7) and the phone number is currently desktop-nav-only styling. - Nav: current design has no mobile menu spec'd in this doc's scope — verify hamburger/disclosure exists and is operable via keyboard; add if missing.
- WCAG 2.1 AA: color contrast on brand-red-on-black checked (≥ 4.5:1 for text — the red #D83135 on near-black passes for large text only; body-size red text gets a lighter tint token), visible focus rings on all interactive elements, quote-flow steps announced via
aria-live, all form fields labeled (already good), touch targets ≥ 44px. - Keep the no-reveal-animation invariant from CLAUDE.md — content renders immediately, always. Any new module (review bar, fitment results) must render without JS-gated visibility.
Acceptance criteria (section 4):
- Quote flow: 4 steps, mobile-complete in < 60s by a first-time tester, submits to SendGrid, fires all §8 events, Turnstile-protected.
- Fitment finder live with ≥ 25 platforms; select→result < 100ms; prefills quote flow.
- Homepage restructured to the 9-bay order; zero "Shop Online" framing remains.
- Brand wall: 100% of logos are functional links.
- Sticky mobile call/build bar live.
- Axe/Lighthouse a11y score ≥ 95 on
/, quote flow, fitment page; keyboard-only run-through of the full quote flow passes. - Interceptor visual verification on real Chrome (mobile + desktop) for every changed page before deploy — per house rules.
5. Copy
Current state: Serviceable but generic ("Premier… Parts & Installation Center", "Contact us today for a free quote"). No quote-terms language, no coverage language, no local specificity beyond Elkton, testimonial reads fabricated — and two pages carry a warranty claim the shop doesn't actually offer (§3).
Target voice — three notes struck everywhere:
- Installation authority. "Fitted and installed in our own bays, not shipped in a box" (keep — best line on the site). We are wrenches, not a warehouse.
- Straight dealing. "Quoted before we wrench. The number we quote is the number you pay." — the anti-Trick-Trucks position, stated plainly, never naming competitors, never quoting a figure.
- Elkton local. Route numbers, drive times, "behind Apple Mitsubishi," Cecil County pride. Written like the owner talks, not like an agency.
Copy guardrails (liability, not style — violations block the build):
- Never state or imply a price for install work. "Free written quote" is the only money-adjacent promise.
- Never promise vehicle outcomes, durability, or trail survivability. We warranty our workmanship, full stop.
- Never write "guarantee," "guaranteed," "we stand behind it," or "worry-free" about anything except the 1-year workmanship term — and never without its exclusions in the same module.
- "Precision fitment guaranteed" (currently on 3 pages) → "Fitment measured, confirmed, and road-tested". Same confidence, no warranty attached.
Headline formulas (use, don't decorate):
- Service pages:
{Service}, Installed Right in Elkton(benefit + place; no price). - City pages:
Lift Kit Installation Near {City} — {N} Minutes from {Landmark/Route}. - Proof modules: number-led —
★ 4.x from N Google reviews,Free 500-mile nut-and-bolt check on every install.
CTA language: One primary verb system, sitewide: "Start Your Build" (flow entry) / "Quote this setup" (fitment finder) / "Call the shop — 410-398-1600" (secondary everywhere). Kill "Request My Quote"/"Get a quote →" variants; consistency is the conversion feature.
Page-by-page direction:
| Page | H1 / direction |
|---|---|
/ |
H1: "Lift Kits, Wheels & Tires — Installed Right, in Elkton." Sub: "Certified Rough Country dealer. Free written quote that holds. Free 500-mile nut-and-bolt check on every build." Hero keeps the eyebrow-stencil styling. |
| Lift installation | "Lift & Leveling Kits, Installed in Elkton." What's included, the 3 lift tiers, fitment module, alignment-included proof, quote promise, FAQ block (feeds §6 schema). |
| Wheels & tires | "Wheel & Tire Packages — Mounted, Balanced, Done." Brand wall functional links land here. |
| LED / lighting | "LED Lighting, Wired Like the Factory Should Have." Relay/switch/loom quality angle — attacks box-store butcher jobs. |
| Suspension | Merge story with lift page; keep URL for SEO, cross-link hard. |
| Builds gallery | Spec-sheet captions: "2022 Gladiator — 3.5" RC lift, 37s on Fuel, 40" bar." Let the trucks talk. |
| RC dealer page | "What a Certified Rough Country Dealer Means for Your Truck" — trained installs, genuine parts, and Rough Country's parts warranty handled locally (theirs, not ours — say so). |
/warranty |
Workmanship warranty text per §3.5 verbatim, coverage and exclusions together, why it exists ("installs fail at the torque wrench, not on the trail"), link to /shop-policies as controlling terms. |
/financing |
"$X/mo" math, how it works in 3 steps, apply CTA (§10). |
| City pages | §9 template — unique local intro, never spun boilerplate. |
| About | The shop's story + the Apple Auto Group backing (real facility, real alignment racks, been here — dealership-grade infrastructure is a differentiator vs. garage operations). |
| Thank-you | "Work order received." What happens next in 3 steps + quote promise restated. |
Trust language (canonical, use verbatim once owner approves):
"Every install leaves torque-spec'd, alignment-checked, and road-tested — and your 500-mile nut-and-bolt check is free, on us. Bring it back and we'll re-torque it. The number we quote before we start is the number you pay. Our workmanship is warrantied one year; full terms are in our shop policies."
Acceptance criteria:
- All key pages carry the new H1s; grep confirms zero "Shop Online"/"Ship to Store" strings.
- CTA audit: only the three sanctioned CTA phrasings appear.
- Quote promise + workmanship language present on every service page, exclusions never separated from coverage.
- Copy-guardrail grep clean: no install prices, no "guaranteed" outside the sanctioned workmanship module, no "3 years/36,000 miles".
- Owner has read and approved the quote-terms + workmanship copy verbatim (both are business commitments).
- No em-dash-stuffed AI-slop tells; copy read aloud passes the "does the owner talk like this" test.
6. Schema / structured data
Current state: Solid spine — LocalBusiness (AutoRepair/Store) + WebSite + PostalAddress + GeoCoordinates emitted on every page from NightShop.astro. Nothing else. Baseline notes: no Service, FAQ, Review, or Breadcrumb schema.
Target: The most complete structured-data graph of any shop in the radius (gap #11: "none of the locals earn star snippets"). Honest framing: Google's self-serving-review policy means stars on our own LocalBusiness snippet are not guaranteed, and FAQ rich results are restricted since 2023 — so the spec targets (a) whatever rich results remain earnable, and (b) the durable win: entity completeness for AI answers. The old site already gets chatgpt.com referrals (CLAUDE.md); a complete Service/FAQ/Review graph is exactly what AI answer engines ingest, and zero competitors emit one.
Concrete changes (all additive to the existing @graph in NightShop.astro, keyed off a per-page schemaExtras prop):
Servicenodes — one per install product (6), each:@type: Service,serviceType,provider: {@id: #business},areaServed(city list),offers: {@type: Offer, availability, areaServed}— nopriceSpecification/minPrice(we publish no prices; schema must mirror the page, and inventing a price in markup that isn't on the page is both a rich-results violation and the same commitment we just declined to make). Emitted on the matching service page + referenced from#business.hasOfferCatalog. Entity completeness for AI answers (the durable win) comes fromserviceType+areaServed+ FAQ, not from price.FAQPage— on lift-install, wheels-tires, financing, and each city page: 5–8 real questions with the on-page answers (§9.2 content doubles as the source). On-page text and schema must match verbatim.AggregateRating+Review— attachaggregateRating(live value from the reviews-service feed, injected at build or via the embed) to#business, plus up to 3Reviewnodes matching the displayed testimonials (author, datePublished, reviewRating). Values must always equal what the page visibly shows — schema mirrors the live bar, never invents.BreadcrumbList— on every non-home page (Home → Section → Page), generated from the path in the layout.sameAson#business— Facebook, Instagram, YouTube, the GBP listing URL, and appleelkton.com (parent-dealer entity linkage helps local trust).openingHoursSpecification—[OWNER: confirm real hours]— required for a complete local entity, currently absent.SITEconstant fix: schema currently hardcodeshttps://apple-offroad.pages.dev. Move to an env-driven site URL so cutover toappleoffroad.comflips every@id/urlin one place.
Acceptance criteria:
- Google Rich Results Test: 0 errors, 0 warnings on
/, one service page, one city page,/financing. - Schema.org validator: full graph parses; every
@idreference resolves. - AggregateRating value == on-page review bar value (automated check in the build or validator).
- Search Console (post-cutover): Service/FAQ/Breadcrumb enhancements detected with 0 errors within 30 days.
- SITESTR validator still exits 0.
7. Site load speed & Core Web Vitals
Current state (our biggest structural lead): homepage 17.5KB, TTFB 47ms, full load 73ms, static Astro on CF Pages, zero JS. Competitors run Wix (No Limit), Shopify (Rhino), and dated tire-CMS stacks (gap #7). The retool ADDS JS (quote flow, fitment finder, review bar, GTM) — this section is about not losing the lead while adding capability.
Budgets (p75 mobile, enforced):
| Metric | Budget | Notes |
|---|---|---|
| LCP | ≤ 1.8s (lab ≤ 1.5s) | Hero image is LCP; keep fetchpriority="high" + preload |
| CLS | ≤ 0.05 | Review bar & promo banner get reserved height; fonts size-adjusted |
| INP | ≤ 200ms | Quote flow interactions must respond < 100ms lab |
| PSI performance | ≥ 95 mobile | On /, lift page, fitment page |
| First-party JS | ≤ 50KB gz total/page | Quote flow ≤ 20KB, fitment ≤ 15KB, misc ≤ 15KB |
| Page weight | ≤ 350KB gz above-the-fold request set on / |
Concrete changes:
- Images: hero + all build/gallery images through Astro's image pipeline → AVIF with WebP fallback, responsive
srcset, explicit dimensions (mostly present),loading="lazy"below fold (present). Recompress the legacy/images/**set used by Night Shop pages; brand PNG logos → single sprite or optimized WebPs (10 × 400×150 PNGs is silent weight). - Fonts: (a) Self-host the two Barlow families (subset, woff2) — removes fonts.googleapis.com entirely. (b) zuume-edge must stay on Adobe Typekit (license) — keep
preconnectto use.typekit.net, load the kit CSS async (print-media swap or equivalent), define asize-adjusted local fallback stack for the display face so CLS stays ≤ 0.05 during swap. (c)[OWNER/us: add appleoffroad.com to the Adobe kit allowlist before cutover — already flagged in CLAUDE.md.] - JS discipline: quote flow + fitment finder + sticky bar are vanilla TS Astro islands; no framework runtime; no jQuery ever returns. GTM is the single third-party script (§8) — loaded after first interaction or 3s idle, whichever first, never render-blocking.
- Review bar: server-render at build time from the reviews-service JSON (site rebuilds daily via CF deploy hook + scheduled GitHub Action — same blog-date-gate pattern used elsewhere) OR client-fetch with reserved height. Build-time preferred: zero runtime request, zero CLS, data at most ~24h + 48h-cache stale, fine for a review count.
- No new render-blocking anything. CSS stays the single
night-shop.css; audit it for unused legacy selectors after the homepage restructure. - Verification harness:
bun run vitalsscript → Lighthouse CI (or keyed PSI API) against/, lift page,/fitment/, one city page; budgets asserted in JSON; run before every deploy alongside the SITESTR validator. Post-launch: CrUX field data checked monthly once traffic qualifies. - Competitive receipts: capture PSI scores for nolimitbmore.com, Rhino Linings DE, Mount Zion, Harford Tire at launch — the §12 scorecard needs the side-by-side.
Acceptance criteria:
- All budget-table numbers met on lab runs (Lighthouse CI, mobile emulation, 4x throttle).
- Mobile PSI ≥ 95 on
/, lift page, fitment page — screenshotted and dated. - PSI side-by-side vs. the 4 named competitors captured; we lead on every metric.
- CLS ≤ 0.05 with Typekit cold-cache (verify with font-blocked throttled run).
-
bun run vitalswired into the deploy script and failing the deploy on budget breach.
8. Tracking & measurement
Current state: ZERO tracking on the new site — no GA4, no GTM, no Ads. (Old WP site: GA4 G-LJQPZE7MVG, GTM GTM-MX4GLTX, Ads AW-10959762811 — polluted by ~81% bot traffic; the old property stays as historical reference only.)
Target: Fresh, clean instrumentation where quote_submit is the money event, wired GA4 → Ads → dashboard, following the house GTM-canonical-events pattern (dashboards read GA4 by exact event name).
Concrete changes:
- Fresh containers: new GA4 property ("Apple Off Road — appleoffroad.com") + new web stream, new GTM container. Do NOT carry
G-LJQPZE7MVG/GTM-MX4GLTX— clean baseline, no bot legacy. Link the existing Google AdsAW-10959762811(it's the account runninggoogle/cpctoday) — import the GA4quote_submitconversion. Grantpai-analytics-reader@paidoc-485820on GA4 + GTM (standard SA pattern). - Event dictionary (exact names — the dashboard contract):
| Event | Fires when | Params |
|---|---|---|
quote_start |
Step 1 first interaction | entry_point (hero/package/fitment/city-page) |
quote_step |
each step advance | step (1–4), goal, budget_band |
quote_submit |
KEY CONVERSION — successful POST | goal, budget_band, financing_interest, vehicle_make |
phone_click |
any tel: link |
placement (nav/hero/sticky/footer/city) |
fitment_use |
finder returns a result | vehicle_year, vehicle_make, vehicle_model |
financing_click |
financing CTA/apply | placement |
review_bar_click |
review bar → Google | — |
form_submit (contact) |
general contact form | form_name |
All fired via dataLayer.push from first-party code; GTM maps → GA4 tags. vehicle_make, goal, budget_band, entry_point, placement registered as event-scoped custom dimensions. GA4 Enhanced Measurement form-interaction events disabled (house rule — only named events flow).
3. Conversions: quote_submit = primary (GA4 key event + Ads conversion). phone_click = secondary. Thank-you page carries no separate pageview-goal — event-based only (static-site safe).
4. Server-side integrity: the /api/quote CF Function logs each submission (timestamp, goal, source) to the function's own storage/email trail so form volume can be reconciled against GA4 monthly (catches blocked-JS undercount).
5. Consent: simple non-blocking notice + Consent Mode v2 defaults (analytics_storage granted, ad_storage denied until interaction) — MD/DE have no CCPA-style analytics-consent mandate for a shop this size, but Ads remarketing later requires the consent signals to exist. Keep it lightweight; no cookie-wall.
6. Dashboard: onboard as a tenant of the multi-tenant dealer-analytics template (Apple Honda/Ford pattern — one YAML + GA4 viewer grant), KPIs recast: Quote Requests, Quote Starts→Submits funnel, Phone Clicks, Fitment Uses, Financing Interest %, Top Vehicles Quoted, Geo (Cecil/New Castle/Harford counties), Source Mix. Serve at analytics.appleoffroad.com post-cutover (house convention), CF Access-gated.
7. Bot hygiene from day 1: GA4 internal-traffic rule for shop/office IPs [OWNER: shop IP]; the datacenter-geo "suspected bot" labeling pattern from dealer-analytics applies.
Acceptance criteria:
- GTM preview: all 8 events fire with correct params through the full quote flow on mobile.
-
quote_submitvisible in GA4 Realtime AND as an Ads conversion (test conversion recorded). - GA4 DebugView clean — no Enhanced Measurement form noise, no unnamed events.
- Dashboard tenant live showing the quote funnel from real GA4 data.
- Monthly reconciliation: SendGrid-delivered quote emails vs. GA4
quote_submitwithin 10%.
9. Local SEO & content
Current state: One Elkton-targeted legacy page (truck-lifts-elkton), decent titles/descriptions, no city pages, no blog, no GBP program. Real organic traffic is small but exceptional quality (761 sessions/90d at 988s avg engagement — these are researchers ready to spend).
Target: Own every "{service} near {city}" query in the 30-mile core. The recon says East Coast Off Road (closest dedicated competitor) is "beatable on nearly every search," Rhino's off-road signal is diluted, and zero local shops produce content (gap #10).
9.1 City-level service pages (gap #8)
- Wave 1 (launch):
/lift-kits-elkton-md/(rebuild the legacy page into the template),/lift-kits-newark-de/,/lift-kits-bel-air-md/. These strike Rhino/Delaware Tire's home turf and the Harford County cluster (Harford Tire, Bay Area, East Coast Off Road, Duffy's) respectively. - Wave 2: Wilmington DE, Middletown DE, Aberdeen–Havre de Grace MD, Rising Sun/North East (Cecil), plus a Cecil County hub page.
- Template (every page unique, never spun): H1 per §5 formula → drive-time/route intro written for that town → the 6 packages with prices → fitment module embed → 3 live reviews → city-specific FAQ (5 Qs: drive time, do you serve X, alignment included, financing, DE-tax angle where honest and applicable
[OWNER: confirm any tax framing before publishing]) → quote flow CTA withentry_point=city-{slug}. - Schema: each page emits
Service(areaServed = that city) +FAQPage+BreadcrumbListper §6. - Internal linking: footer "Areas we serve" block + service pages link to their city variants.
9.2 Content engine (gap #10 — zero local competition)
- Cadence: 2 posts/month minimum, install-shop questions only — each post answers one buying question and ends in the fitment finder or quote flow. Launch set (write 4 before cutover):
- "How much lift do I need to run 35s? (F-150, Silverado, Ram, Tacoma, Wrangler)" — the fitment finder in prose.
- "Leveling kit vs. lift kit: which one your truck actually needs" — the honesty brand in action.
- "What a lift kit really costs installed (we publish our prices)" — the wedge, as content.
- "35s vs. 37s: clearance, gearing, and what it does to your ride"
- Backlog: "Is a lifted truck street-legal in Maryland/Delaware? (researched, sourced)", "Why alignment after a lift is non-negotiable", "Wheel offset explained in 5 minutes", seasonal prep posts matching §2.4.
- YouTube (P2): install timelapses + before/after walkarounds shot on a phone in the bay; embed via lite-youtube pattern (already used in legacy build — zero CWV cost). Each video pairs with a post.
[OWNER: someone films 2 minutes per build.] - Blog on Astro content collections (
src/content/blog/), Article schema, author = the shop.
9.3 Google Business Profile
[OWNER-GATED]Confirm/claim the Apple Off Road GBP listing (distinct from Apple Mitsubishi), grant manager access. Then: category "Auto parts store" + "Truck repair shop"-class secondaries as available; services list mirroring the 6 packages; photos (20+ real build/bays); hours; booking link →/quote flow; UTM-tagged website links (housegbp_*convention).- GBP posts: reuse the dealer-poster GBP pipeline (live for Apple Mitsubishi since 2026-07-14) — 2 posts/week: one build spotlight (gallery photo + spec), one offer/seasonal. Same infrastructure, new location.
- Review-generation loop: every completed work order → SMS/email review ask with the direct Google review link
[OWNER: front-desk process — a printed QR card at pickup works]. Target +8 reviews/month; that's a 100-review year against a currently fragmented field.
Acceptance criteria:
- Wave-1 city pages live at launch with unique copy, schema valid, fitment embed working.
- 4 launch posts published; each ends in a tracked CTA.
- GBP: access secured, services + photos + booking link live, first 4 GBP posts published.
- Rank tracking configured (weekly) for "lift kit installation elkton md / newark de / bel air md", "wheel and tire packages near me" (from Elkton geo), "off road shop near me" — page-1 for the three city terms within 90 days of cutover is the target; movement documented monthly.
- Review velocity ≥ 8/month by 60 days post-launch.
10. Financing & conversion tooling
Current state: No financing anywhere. Recon: only Intercourse (Synchrony) and No Limit surface financing at all (gap #2) — and the national leaders put "$/mo" under everything.
Target: "$X/mo" under every package — making a $5,800 build feel like $180/mo — plus a quote→book flow that ends with a drop-off date, which nobody local offers end-to-end.
Concrete changes:
[OWNER-GATED]Sign up for financing program(s). Recommended order: Synchrony Car Care (proven in this exact segment by Intercourse; broad approval band) as primary; Affirm and/or Katapult as secondary/no-credit options if the volume justifies. Owner action: merchant applications. Nothing ships until at least one program is live — no fake financing UI.- Placement once live: (a) "or ~$X/mo" line under every package price (single
financingMonthly()helper computing frompricing.tsfloors using the program's real term/rate — labeled "estimate, on approved credit"); (b)/financingpage: how it works in 3 steps, apply link/prequal widget, FAQ + schema; (c) nav link + trust-chip; (d) quote-flow Step 3 "interested in financing?" already captures intent (§4.1) and routes hot leads. - All financing surfaces fire
financing_click(§8). - Quote→book→install-date flow: v1 (launch): quote flow Step 4 captures preferred drop-off week; the shop confirms by phone (matches how the shop actually schedules). v2 (P2): if volume proves it, a real slot-picker backed by a lightweight availability calendar the shop controls — do not build this before the phone-confirm loop is measured; Intercourse's booking widget shows the tool without operational discipline is just another form.
- Compliance: financing copy uses the program's approved merchant language verbatim; "estimate/OAC" disclaimers on every $/mo figure.
Acceptance criteria:
- ≥ 1 financing program live; apply path reachable in ≤ 2 taps from the homepage.
- $/mo appears with every published price, computed from one helper, disclaimed correctly.
-
financing_clickand Step-3 financing-interest data flowing to GA4/dashboard. - ≥ 1 test quote submitted with a preferred drop-off week, confirmed by the shop's real process.
11. Prioritized implementation plan
Sizing: S ≤ ½ day · M 1–2 days · L 3–5 days. ⚑ = owner-gated (can't ship without the owner).
P0 — must-have to launch (the site earns its keep)
| # | Item | Spec § | Size | Owner gate |
|---|---|---|---|---|
| 0.1 | /api/quote CF Function → SendGrid + Turnstile + auto-reply |
4.1 | M | ⚑ confirm recipient + reply SLA |
| 0.2 | Multi-step "Start Your Build" quote flow (4 steps, sessionStorage, events) | 4.1 | L | — |
| 0.3 | Fresh GA4 + GTM + event dictionary + Ads conversion import | 8 | M | ⚑ Ads account confirm (AW-10959762811) |
| 0.4 | Reviews-service tenant apple-offroad + live review bar + real testimonials |
3.1–3.2 | M | ⚑ GBP access/manager grant |
| 0.5 | Pricing data file + published "from $X installed" on packages/pages | 2.2 | M | ⚑ real prices |
| 0.6 | Homepage restructure to 9-bay order (packages, proof, guarantee modules) | 4.3 | L | — |
| 0.7 | Copy pass — H1s, CTAs, guarantee language, kill ecommerce framing | 5 | M | ⚑ approve guarantee verbatim |
| 0.8 | Schema extension: Service, FAQ, Review/AggregateRating, Breadcrumb, hours, sameAs, env SITE | 6 | M | ⚑ confirm hours |
| 0.9 | CWV hardening: image pipeline, self-host Barlow, async Typekit, budgets + bun run vitals gate |
7 | M | — |
| 0.10 | Sticky mobile call/build bar + a11y audit fixes | 4.5 | S | — |
| 0.11 | Wave-1 city pages (Elkton rebuild, Newark DE, Bel Air MD) | 9.1 | M | — |
| 0.12 | Cutover prep: Typekit domain allowlist, GoDaddy DNS plan, env-driven site URL | 7, 6 | S | ⚑ GoDaddy DNS access |
P1 — the leapfrogs (within ~30 days of launch)
| # | Item | Spec § | Size | Owner gate |
|---|---|---|---|---|
| 1.1 | Fitment finder — dataset (25 platforms) + UI + quote-flow prefill | 4.2 | L | ⚑ sanity-check platform list |
| 1.2 | Builds gallery v2 — filterable, spec-sheet metadata, ≥ 10 builds | 3.3 | M | ⚑ FB page access (photo recovery) + build intake habit |
| 1.3 | Financing live: program placement, /financing page, $/mo helper | 10 | M | ⚑ financing merchant signup |
| 1.4 | Functional brand wall | 4.4 | S | — |
| 1.5 | /guarantee page + quote-flow guarantee line |
3.5 | S | — |
| 1.6 | GBP optimization + dealer-poster GBP posting pipeline for the new location | 9.3 | M | ⚑ GBP access |
| 1.7 | Analytics dashboard tenant (dealer-analytics template) | 8.6 | M | — |
| 1.8 | 4 launch blog posts + content collections wiring | 9.2 | M | — |
| 1.9 | Promo banner component + first seasonal offer | 2.4 | S | ⚑ approve offer |
| 1.10 | Review-generation loop (QR card + ask process) | 9.3 | S | ⚑ front-desk process |
P2 — compounding (30–90 days)
| # | Item | Spec § | Size | Owner gate |
|---|---|---|---|---|
| 2.1 | Wave-2 city pages (Wilmington, Middletown, Aberdeen/HdG, Rising Sun/North East, Cecil hub) | 9.1 | M | — |
| 2.2 | Content cadence 2/mo + YouTube timelapse pipeline | 9.2 | ongoing | ⚑ bay filming |
| 2.3 | Booking v2 (real slot-picker) — only if funnel data justifies | 10.4 | L | ⚑ scheduling process |
| 2.4 | Fitment dataset expansion (platform long tail) + wheel-brand fitment | 4.2 | ongoing | — |
| 2.5 | Custom fab capability page + fab gallery | 2.1 | S | ⚑ fab photos |
| 2.6 | Competitor PSI/rank re-benchmark + scorecard refresh (quarterly) | 12 | S | — |
Consolidated owner-dependency list (nothing in ⚑ ships without these)
- Real install prices for the 6 packages + one example build sheet (P0.5 — the wedge doesn't exist without them).
- GBP access: confirm Apple Off Road's own listing; grant manager to the agency SA/account (P0.4, P1.6 — review bar + GBP program both hang on this).
- Financing merchant signup — Synchrony Car Care first; Affirm/Katapult optional (P1.3).
- GoDaddy DNS access for the appleoffroad.com cutover (zone is NOT in our Cloudflare) (P0.12).
- Adobe Typekit allowlist — add appleoffroad.com to kit
quz1sox(P0.12). - Guarantee terms approved verbatim — 500-mi re-torque + no-upsell pledge are real commitments (P0.7).
- Facebook page access to recover the 4 dead build photos + ongoing gallery photos (P1.2).
- Business hours for schema + GBP (P0.8).
- Quote-response SLA ("we call within one business day"?) + confirm OFFROAD@appleelkton.com is monitored (P0.1).
- Front-desk review-ask process (QR card at pickup) (P1.10).
- Shop/office IP for GA4 internal-traffic exclusion (P0.3).
- Seasonal offer approval + any tax-framing claims on DE pages (P1.9, 9.1).
12. Definition of done — how we prove we beat the field
The scorecard. Run at launch, re-run at 90 days, then quarterly. Every row names its yardstick from the recon.
| # | Metric | Target | Benchmark to beat | Verify with |
|---|---|---|---|---|
| 1 | Mobile PSI performance | ≥ 95; LCP ≤ 1.8s, CLS ≤ 0.05, INP ≤ 200ms | No Limit (Wix), Rhino (Shopify), Harford, Mount Zion — side-by-side PSI captured | Lighthouse CI + PSI API, dated screenshots |
| 2 | Live review display | Real-time ★/count bar on 100% of pages | Harford's 5.0/353 buried on SureCritic; No Limit static | Interceptor visual check + Worker endpoint 200 |
| 3 | Review velocity | +8/month; +100 in year 1 | Mount Zion 479 is the long-range count target | GBP monthly count log |
| 4 | Schema rich-results | 0 errors on Service/FAQ/Review/Breadcrumb graph; enhancements detected in GSC | All locals: LocalBusiness-or-nothing | Rich Results Test + GSC enhancements report |
| 5 | Fitment finder | Live, ≥ 25 platforms, ≥ 100 fitment_use/mo by day 90 |
NO local shop has one (gap #1) | GA4 fitment_use |
| 6 | Transparent pricing | ≥ 6 real "from $X installed" prices live | Field is 100% quote-only (gap #6) | Page audit; zero placeholders in dist |
| 7 | Conversion flow | 4-step quote flow live; ≥ 15 quote_submit/mo by day 90; start→submit ≥ 25% |
Field's bare contact forms; No Limit's unqualified text-to-quote | GA4 funnel + SendGrid reconciliation |
| 8 | Tracking | All 8 events + Ads conversion verified end-to-end | N/A — table stakes we uniquely clear | GTM preview + GA4 Realtime + Ads test conv. |
| 9 | Financing | Program live, $/mo on every package, financing_click flowing |
Only Intercourse + No Limit surface it (gap #2) | Page audit + GA4 |
| 10 | Local rank | Page-1 for "lift kit installation" + {Elkton, Newark DE, Bel Air} within 90 days of cutover | East Coast Off Road ~invisible; Rhino diluted | Weekly rank tracker log |
| 11 | Guarantee | Written install guarantee live in 3 surfaces | Nobody publishes one (gap #12) | Page audit |
| 12 | Content | 4 posts at launch, 2/mo cadence held | Zero local shops produce content (gap #10) | Publish log |
The single sentence of done: A buyer in Newark, Bel Air, or Elkton searching "lift kit installed near me" on a phone finds us first, sees live stars and real prices no one else shows, specs their exact truck in the fitment finder, and books a quote in under a minute — and we can see every step of it in the dashboard.
Build gates that never relax: SITESTR validator exit 0 · bun run vitals budgets green · Interceptor visual verification per changed page · no reveal-gated content · bun/TS only.