APPLE OFF ROAD · Spec
Contents
  1. 1. Executive summary & competitive thesis
  2. 2. Marketing fundamentals — the 4 P's
  3. 3. Social proof
  4. 4. UI/UX & design — the conversion architecture
  5. 5. Copy
  6. 6. Schema / structured data
  7. 7. Site load speed & Core Web Vitals
  8. 8. Tracking & measurement
  9. 9. Local SEO & content
  10. 10. Financing & conversion tooling
  11. 11. Prioritized implementation plan
  12. 12. Definition of done — how we prove we beat the field
Reading on your phone? Text me back on Telegram (@spm_doc_bot) with any changes and I’ll update this page at the same link. Reply GO when you’re ready for me to build it.

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:

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, published install pricing, 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:

  1. Transparency wedge — published "from $X installed" tiers + written re-torque guarantee, against a field that is 100% quote-only (gap #6, #12). Directly weaponizes Trick Trucks' $1,600-unneeded-lift complaint.
  2. 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.
  3. 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)
Pricing ≥ 6 "from $X installed" prices published Entire field (100% quote-only)
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)


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:

  1. 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.
  2. Every product block states: what's included, typical bay time ("in the morning, out by close" where true — owner confirms), the "from $X installed" floor (§2.2), and a Start Your Build button that opens the quote flow with that product preselected.
  3. 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).
  4. 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:

2.2 Price — the transparent-pricing wedge

Current state: Zero prices anywhere. Old store had prices missing on a third of items; dead now.

Target: The only shop in 100 miles publishing install pricing. The recon is unambiguous: 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. Honest published floors turn that into our headline.

Concrete changes:

  1. Publish "from $X installed" floors on the six packages. [OWNER: real numbers required — see §11 dependencies. Structure below, prices are placeholders to be replaced, never launched as-is.]
    • Level It — from $___ installed (kit + labor + alignment)
    • Lift It (2–3.5") — from $___ installed
    • Big Lift (4–6") — from $___ installed
    • Wheels & Tires — packages from $___ mounted, balanced, TPMS'd
    • Light It Up — from $___ installed & wired
    • The Full Build — quoted, with a published example build sheet ("2021 F-150: 3.5" RC lift + 35s on Fuel wheels + 40" bar = $___ installed")
  2. Pair every price with the honesty frame: "Quoted before we wrench. The price we quote is the price you pay — no mid-job upsells." (Direct counter-position to the over-quoting failure mode in the field.)
  3. Each price row shows the financing translation "or ~$__/mo" once financing is live (§10).
  4. Prices live in one data file (src/data/pricing.ts) so the owner can update via a single edit; every surface (homepage, service pages, quote flow) reads from it.

Acceptance criteria:

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:

  1. 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.
  2. 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).
  3. "Behind Apple Mitsubishi" stays prominent (real wayfinding + implies dealership-grade facility, insurance, and alignment equipment — the exact claim Duffy's trades on).
  4. 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:

  1. Financing front-and-center (§10): "$X/mo" under every package, /financing page, nav presence.
  2. Standing offer: "Free fitment check + written quote — 30 minutes, no obligation." Costs nothing, gets trucks into the lot, feeds the quote pipeline.
  3. 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.
  4. Promo banner is a single PromoBanner.astro component driven by src/data/promo.ts (start/end dates, copy, CTA target) so switching seasons is a one-line change and never a redesign.
  5. Every promo carries a UTM-tagged CTA into the quote flow so §8 can attribute it.

Acceptance criteria:


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, no guarantee. 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).

Target: The only site in the radius showing a live "4.x★ · N Google reviews" bar on every page, backed by schema, real trucks, and a written guarantee. We don't need to out-count Mount Zion's 479 on day one — we need to out-display everyone.

Concrete changes:

  1. Live Google reviews bar — reviews-service pattern. Onboard Apple Off Road as a tenant of the existing spm-reviews CF Worker (the same system live on Apple Honda's homepage: GET /v1/{slug}/reviews JSON + /v1/{slug}/embed, KV-cached 48h, daily cron, GBP API via the analytics service account). New tenant slug apple-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).
  2. 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.
  3. 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.
  4. Rough Country certified-dealer proof block: dedicated homepage module + the existing /apple-offroad-is-a-rough-country-performance-dealer page 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).
  5. The written guarantee (gap #12): "The Apple Off Road Install Guarantee — torque-spec'd, alignment-checked, road-tested. Free 500-mile re-torque on every lift and wheel install. If we installed it, we stand behind it — in writing." Renders as a homepage module + /guarantee page + one line inside the quote flow. This attacks the segment's documented failure mode (sloppy installs — the recon cites Harford's "missing parts" complaint) and no competitor publishes one. [OWNER: approve terms — this is a real service commitment.]

Acceptance criteria:


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.

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?"

4.3 Homepage information architecture (revised bay order)

  1. Hero — H1 (§5) + live review bar + quote flow Step 1 card. Keep the wheels hero image, add fetchpriority (already present).
  2. Trust chips row — Certified Rough Country Dealer · Free 500-mi re-torque · Financing available · Behind Apple Mitsubishi.
  3. Packages (Bay 02) — the 6 products with "from $X installed / ~$Y/mo" (replaces "Shop Online — Ship to Store" tiles; kills the dead ecommerce framing).
  4. Fitment finder teaser (Bay 03) — "What fits your truck?" inline 3-select module.
  5. Proof (Bay 04) — 3 live Google reviews + link to all.
  6. Builds (Bay 05) — existing gallery grid, now linking into the filterable gallery.
  7. Guarantee + RC certification (Bay 06) — the two trust modules.
  8. HQ / find us (Bay 07) — existing Shop Headquarters section (map embed optional, static image preferred for CWV).
  9. 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

Acceptance criteria (section 4):


5. Copy

Current state: Serviceable but generic ("Premier… Parts & Installation Center", "Contact us today for a free quote"). No pricing language, no guarantee language, no local specificity beyond Elkton, testimonial reads fabricated.

Target voice — three notes struck everywhere:

  1. 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.
  2. Honest pricing. "Quoted before we wrench. No mid-job upsells." — the anti-Trick-Trucks position, stated plainly, never naming competitors.
  3. Elkton local. Route numbers, drive times, "behind Apple Mitsubishi," Cecil County pride. Written like the owner talks, not like an agency.

Headline formulas (use, don't decorate):

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. Published install pricing. Free 500-mile re-torque on every build." Hero keeps the eyebrow-stencil styling.
Lift installation "Lift & Leveling Kits, Installed — from $X." What's included, the 3 lift tiers, fitment module, alignment-included proof, FAQ block (feeds §6 schema).
Wheels & tires "Wheel & Tire Packages, Mounted, Balanced, Done — from $X." 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" — warranty honored here, trained installs, genuine parts.
/guarantee The full guarantee text + why it exists ("lifts fail at the torque wrench, not the box").
/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 + guarantee restated.

Trust/guarantee language (canonical, use verbatim once owner approves):

"Every install leaves torque-spec'd, alignment-checked, and road-tested — and we'll re-torque your lift or wheels free at 500 miles. The price we quote before we start is the price you pay. That's in writing."

Acceptance criteria:


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):

  1. Service nodes — one per install product (6), each: @type: Service, serviceType, provider: {@id: #business}, areaServed (city list), offers: {@type: Offer, priceSpecification: {@type: PriceSpecification, minPrice, priceCurrency: USD}} reflecting the published floors. Emitted on the matching service page + referenced from #business.hasOfferCatalog.
  2. 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.
  3. AggregateRating + Review — attach aggregateRating (live value from the reviews-service feed, injected at build or via the embed) to #business, plus up to 3 Review nodes matching the displayed testimonials (author, datePublished, reviewRating). Values must always equal what the page visibly shows — schema mirrors the live bar, never invents.
  4. BreadcrumbList — on every non-home page (Home → Section → Page), generated from the path in the layout.
  5. sameAs on #business — Facebook, Instagram, YouTube, the GBP listing URL, and appleelkton.com (parent-dealer entity linkage helps local trust).
  6. openingHoursSpecification[OWNER: confirm real hours] — required for a complete local entity, currently absent.
  7. SITE constant fix: schema currently hardcodes https://apple-offroad.pages.dev. Move to an env-driven site URL so cutover to appleoffroad.com flips every @id/url in one place.

Acceptance criteria:


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:

  1. 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).
  2. 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 preconnect to use.typekit.net, load the kit CSS async (print-media swap or equivalent), define a size-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.]
  3. 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.
  4. 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.
  5. No new render-blocking anything. CSS stays the single night-shop.css; audit it for unused legacy selectors after the homepage restructure.
  6. Verification harness: bun run vitals script → 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.
  7. 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:


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:

  1. 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 Ads AW-10959762811 (it's the account running google/cpc today) — import the GA4 quote_submit conversion. Grant pai-analytics-reader@paidoc-485820 on GA4 + GTM (standard SA pattern).
  2. 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:


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)

9.2 Content engine (gap #10 — zero local competition)

9.3 Google Business Profile

Acceptance criteria:


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:

  1. [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.
  2. Placement once live: (a) "or ~$X/mo" line under every package price (single financingMonthly() helper computing from pricing.ts floors using the program's real term/rate — labeled "estimate, on approved credit"); (b) /financing page: 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.
  3. All financing surfaces fire financing_click (§8).
  4. 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.
  5. Compliance: financing copy uses the program's approved merchant language verbatim; "estimate/OAC" disclaimers on every $/mo figure.

Acceptance criteria:


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)

  1. Real install prices for the 6 packages + one example build sheet (P0.5 — the wedge doesn't exist without them).
  2. 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).
  3. Financing merchant signup — Synchrony Car Care first; Affirm/Katapult optional (P1.3).
  4. GoDaddy DNS access for the appleoffroad.com cutover (zone is NOT in our Cloudflare) (P0.12).
  5. Adobe Typekit allowlist — add appleoffroad.com to kit quz1sox (P0.12).
  6. Guarantee terms approved verbatim — 500-mi re-torque + no-upsell pledge are real commitments (P0.7).
  7. Facebook page access to recover the 4 dead build photos + ongoing gallery photos (P1.2).
  8. Business hours for schema + GBP (P0.8).
  9. Quote-response SLA ("we call within one business day"?) + confirm OFFROAD@appleelkton.com is monitored (P0.1).
  10. Front-desk review-ask process (QR card at pickup) (P1.10).
  11. Shop/office IP for GA4 internal-traffic exclusion (P0.3).
  12. 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.

Apple Off Road competitive retooling spec · generated 2026-07-16 16:02 UTC · private (noindex)