You're running the PageHub workflow "Get found locally" on site <your site id>.
- Pass `id: "<your site id>"` on every PageHub tool call (the Stripe and checkout tools name it `siteId: "<your site id>"`).
- Every change stages in the site's draft. Never call `publish_site` unless the user says to publish.
- Finish by showing the proof: SEO results for the home page before and after, the new town and service pages with their links, phone screenshots of the home page and one town page, and the list of changes.
- Keep to about 15 minutes of work. If more is left, list it and stop.
- Draft preview: https://pagehub.dev/view/<your site id>
- This needs the PageHub connector (https://pagehub.dev/api/mcp). If its tools aren't available, tell the user to add it and stop.

Goal: make site <your site id> easy for search engines and map apps to place: one
consistent name, address and phone, LocalBusiness structured data, a page per
town served, a page per service when the site has none, and a map with the
right pin. Use only facts the site or the user gives. Never invent reviews,
ratings, years in business, landmarks, hours or prices.

Towns served: (not given)
Services: (not given)
Address: (not given)
Google Maps link: (not given)

## 1. Measure first (read-only, about 3 minutes)

1. `select_site` for the site name, domain and title. `list_pages` for page ids
   and slugs. Note whether there is already a page per service or per town.
2. `list_collections`. If a `services` or `areas` collection already exists,
   reuse it in step 3 instead of making a second one.
3. `read_site_file` on `site.json`. Read `company` (name, phone, email,
   address, location) and `inject`. Note any `application/ld+json` script
   already there.
4. `read_site_file` on the home page's file (from `list_pages`). Note any
   existing `application/ld+json` script in it; you will keep it.
5. Find every place the business name, address and phone appear:
   `search_site_files` for the phone number's last 4 digits, then for the
   street name, then for `{% map`. Read each hit with `read_site_file`. Write
   down every spelling of the phone and address you see (header, footer,
   contact section, buttons with `tel:` links).
6. `audit_seo` on the home page. `screenshot_site` of the home page at
   `width: 390`, `fullPage: true`. These are the "before".

If the site and the inputs together don't give a business name, a phone or an
email, and a town, stop and ask for them.

## 2. Name, address and phone, everywhere the same (about 3 minutes)

Pick one form of each: the address from the input (else the site's most
complete one) and the phone as written locally, like "(310) 555-0123".

- `edit_site_files` on `site.json` with the company's `name`, `phone`, `email`,
  `address` and `location` (the main town). Change only those values and keep
  the file valid JSON.
- Elements that show only the phone or the address: replace their text with
  the variable (the double-curly company phone or company address), so they
  can never drift again. Text that mixes name, address and phone into a
  sentence: fix the spelling only.
- Every call link is an `href="tel:+1..."` with the same number in
  international form.
- Put the file changes into one `edit_site_files` call.

## 3. Structured data (about 1 minute)

Build one schema.org object with the most specific `@type` that fits
(`AutoRepair`, `Plumber`, `Dentist`, else `LocalBusiness`): `name`,
`telephone`, `email`, `url` (the site's domain from `select_site`),
`address` as a `PostalAddress` (skip it when no address is shown),
`areaServed` listing the towns, `geo` when the Maps link gives coordinates,
`openingHoursSpecification` only when hours are on the site, and `sameAs` only
for profile links already on the site.

Save it with `update_page` on the home page: `seo.jsonLd` when the page has
none, otherwise `seo.schema` holding the existing objects plus this one. If a
LocalBusiness script already sits in `site.json` inject or in the home page
file, update that one instead with `edit_site_files`, changing only that
script. Never leave two LocalBusiness objects.

## 4. A page for each town (about 5 minutes)

Read `get_style_reference` with `topic: "pages"` once for detail-page rules.
Use `get_block` with `slug: "services-three-columns"` only as a shape
reference; write the sections in the site's own style (copy class names from
its existing sections).

1. `create_collection` with `slug: "areas"`, `isPublic: true`, and a `schema` of `title`
   (text, required), `slug` (text, required), `intro` (text), `services` (text).
   Skip when it exists.
2. `create_collection_rows` with up to 8 towns from the input, in order.
   `slug` is the kebab-case town name. `intro` is two or three sentences
   written from real facts: what the business does there, from where, and how
   to book. Each town's intro must differ in more than the town name. Plain
   text only (HTML in a field shows as literal tags).
3. Detail page: `add_page` with `name: "Service area"` and `text` holding the
   page's HTML (copy the header and footer renders from an existing page), then
   `update_page` with `pathPattern: ":slug"` and `seo.title` like
   "[Town] [service] | [business name]" (50 to 60 characters) and
   `seo.description` from the intro. The page body picks the row with the
   `where` filter on `slug` equal to `request.params.slug`, and shows an h1
   with the town name, the intro, the services, and the site's main call or
   quote button. Not in the nav.
4. List page: `add_page` with `name: "Areas we serve"` (a separate page,
   because a detail page opened without a town shows nothing). Give it
   `seo.title` and `seo.description` with `update_page`. Its body loops over
   the `areas` collection (loop variable `item`), repeating a card whose link
   goes to the detail page and the row's `{{item.slug}}`.
5. Add an "Areas we serve" link to the footer: `read_site_file` on
   `partials/footer.liquid`, then `edit_site_files`, copying a sibling link's
   classes.

## 5. A page for each service, only if missing (about 2 minutes)

If the site already has a page per service, skip this step. Otherwise repeat
step 4 with a `services` collection (`title`, `slug`, `summary`, `details`)
from the input or the site's existing service cards, a "Service" detail page
and links from the existing service cards to each service page and the row's `{{item.slug}}`.
If time runs short, stop after the towns and list this as the next run.

## 6. Map (about 1 minute)

- An existing map block: make sure it uses `tiles: 'osm'` (the other styles
  show "API KEY REQUIRED" on every tile).
- No map and the Maps link holds coordinates (`@lat,lng` or `!3d<lat>!4d<lng>`):
  add a map block next to the address in the contact section, with
  `lat`, `lng`, `zoom: 14`, `tiles: 'osm'`, a wrapper
  `w-full h-80 rounded-box overflow-hidden`, and one pin child with those
  coordinates and the business name as its title. The tag's syntax is in
  `get_style_reference` with `topic: "liquid"`.
- No coordinates: skip the map and list it. Never guess coordinates.

## Don't

- Colors, spacing and icons follow the site: palette tokens, spatial tokens,
  the site's icon filter. Nothing visible goes in `site.json` inject.
- Don't use `update_site` for titles or descriptions: it changes the live site
  at once instead of the draft.
- Don't `publish_site`. Search engines only see these pages once the site is
  published on its real domain, so end by asking.
- Don't make more than 8 town pages in one run, and never pages for towns the
  user didn't name.

If a write fails, read the file again and retry once with the smallest change. If it
fails again, note the exact error and move on.

## 7. Prove it and report

1. `audit_seo` on the home page again, and on the town list page.
2. `screenshot_site` at `width: 390`: the home page with `fullPage: true`, and
   the first town's page at `path` set to `/service-area/<slug>`. If a page
   shows the wrong town or a blank section, fix the binding before reporting.

Reply with:
- SEO score before and after for the home page.
- The new pages as draft preview links (the `Draft preview:` address `screenshot_site` prints for each path; never one you build): the list page and each town (and
  service) page.
- What changed, in plain words ("Your phone number now reads the same in 4
  places", "Added business details for Google").
- What's left: towns past the first 8, service pages if skipped, the map if no
  coordinates, a header nav link to "Areas we serve", and Google Business
  Profile, which only the owner can claim.
- A question: publish these changes now?
