# Hyperlocal Fork Pattern — Playbook

How to spin a new market-specific `ad-neighbor` in <5 min.

---

## Origin

Gemini's round-3 specific recommendation on `ad-neighbor-v1` (Tier-1 ad scored 57/60):

> *"test hyper-local versions with a stylized-but-recognizable map of a specific neighborhood in the target geo (e.g., 'Laurelhurst already did the math'). Elevates from 9 to 10."*

Implemented as `ad-neighbor-v2-hyperlocal` (Lake Zurich, IL) + 3 market forks (Naperville IL, Royal Oak MI, Centennial CO).

---

## Pattern

The base ad has 4 swappable elements per market — everything else stays:

```
1. Top-right timestamp:
     "{CITY} Snapshot"
     "Sample 20 homes · {RECOGNIZABLE STREET / NEIGHBORHOOD MARKER}"

2. Headline H1:
     "{CITY} already"
     "did the math."

3. Body copy:
     "9 of 20 homes on this stretch are already on solar."
     (Keeps the 9/20 social-proof anchor consistent across markets)

4. (Optional, harder) Map state clip-path:
     Currently Illinois shape. Could be approximated for OR/WI/CA/etc but adds 15+ min per fork.
     Recommend: keep generic neighborhood-grid map across markets, swap only the text content.
```

---

## Sed-based fork command

For a new market, replacing `[OLD_CITY]` → `[NEW_CITY]` and `[OLD_STREET]` → `[NEW_STREET]`:

```bash
cp ad-neighbor-v2-hyperlocal.html ad-neighbor-{slug}-v1.html

sed -i \
  's/Lake Zurich Snapshot/{NEW_CITY} Snapshot/; \
   s/Old Mill Grove Rd/{NEW_STREET} corridor/; \
   s/Lake Zurich already/{NEW_CITY} already/' \
  ad-neighbor-{slug}-v1.html

# Aspect variants
sed 's/height: 1350px/height: 1920px/' ad-neighbor-{slug}-v1.html > ad-neighbor-{slug}-v1-9x16.html
sed 's/height: 1350px/height: 1080px/' ad-neighbor-{slug}-v1.html > ad-neighbor-{slug}-v1-1x1.html

# Render
node render-still.js ad-neighbor-{slug}-v1.html
node render-still.js ad-neighbor-{slug}-v1-9x16.html ad-neighbor-{slug}-v1-9x16.png 1080 1920
node render-still.js ad-neighbor-{slug}-v1-1x1.html ad-neighbor-{slug}-v1-1x1.png 1080 1080
```

---

## Forks built in sprint

| File | City | Street marker | State |
|---|---|---|---|
| `ad-neighbor-v2-hyperlocal` | Lake Zurich | Old Mill Grove Rd | IL |
| `ad-neighbor-naperville-v1` | Naperville | Hobson Rd corridor | IL |
| `ad-neighbor-royaloak-v1` | Royal Oak | Vinsetta Blvd corridor | MI |
| `ad-neighbor-centennial-v1` | Centennial | Smoky Hill corridor | CO |

---

## Future fork candidates (named-market expansion list)

**Illinois** (Summit IL footprint):
- Schaumburg (Roselle Rd corridor)
- Geneva (Randall Rd corridor)
- Crystal Lake (Pingree Rd corridor)

**Michigan** (DTE territory):
- Birmingham (Maple Rd corridor)
- Ferndale (Woodward Heights corridor)
- Northville (Six Mile Rd corridor)

**Colorado** (Xcel territory):
- Lakewood (Wadsworth corridor)
- Westminster (120th Ave corridor)
- Highlands Ranch (Broadway corridor)

Street markers should be **specifically recognizable to homeowners in that city** — feels like an aerial survey of THEIR neighborhood, not a generic stock-photo abstraction.

---

## Targeting recommendation

Ship per-market forks against **5-mile-radius geo + matching city ZIP codes**. The hyperlocal copy collapses if served to wrong-city audiences.

Test against the generic `ad-neighbor-v1` as control — round-3 hypothesis is hyperlocal lifts conversion 10-30% on social-proof-driven concepts.

---

— Clone (ad31a131), 2026-05-15
