# Villas at Blue Mountain — Launch Checklist

Source: client docs in `notes/` (Edit Recommendations + New Pages), 2026-09-03.
Working copy: https://villasatbluemountain.demoing.info (gated, pw `showmethesite`)
Stack: WordPress + Astra + Elementor Pro. Header/footer are Elementor Theme Builder templates.

Working method: Claude takes a first stab at each item, then pauses for Rian's review
before moving on. Mark items `[x]` as they're approved.

---

## Phase 0 — Safety & decisions (do before touching anything)

- [x] **0.1 Take a restore point.** DONE: verified the existing UpdraftPlus set from
      2026-09-03 10:30 is complete (db + plugins + themes + uploads + others + mu-plugins).
      No new backup needed.
      ~~Original note:~~ Full DB + wp-content snapshot so any Elementor edit is
      reversible. This site was built by someone else; Elementor has no reliable undo across
      sessions. (UpdraftPlus is installed.)
- [ ] **0.2 Confirm the launch target.** The client's docs reference
      `luxury.villasatbluemountain.com`. Menu #16 in the DB hardcodes
      `villasatbluemountain.com` and `rentals.villasatbluemountain.com`.
      Need to know: what domain does this launch on, and is this one site covering both
      rentals + real estate, or does it stay split? The requested nav
      (Vacation Villa Rentals / Real Estate Opportunities / Contact Us) implies ONE site.
      **This changes the nav build and the redirect plan — answer before Phase 3.**
- [ ] **0.3 Send the client one consolidated question list** (see "Client questions" at
      the bottom) instead of dribbling questions out over the next two weeks.

---

## Phase 1 — Villa page corrections (fully specified, low risk)

- [x] **1.1 Azure** — delete "Dedicated Butler" from Services. *(confirmed present)*
- [x] **1.2 Serenità** — delete "Dedicated Butler" from Services. *(confirmed present)*
- [x] **1.3 Forget-Me-Not** — delete "Tesla battery backup during power interruptions".
      *(confirmed present)*
- [x] **1.4 Turn-down service** — client doubts it exists. Present on Villa Blue Ocean and
      Forget-Me-Not. **Blocked on client confirmation** (question list).
- [x] **1.5 Rename "Villa Azure" → "Azure Villa"** (headline done; see work log for the
      open naming question on title/menu/home card) — page title, menu label, home page card,
      and any in-copy references. Leave the URL slug `/azure/` alone.
- [x] **1.6 Fix Forget-Me-Not "More Info" link.** Root cause found: the button targets the
      `#more` anchor, but that section ID only exists on Villa Blue Ocean. Either add the
      `more` ID to the matching Forget-Me-Not section or remove the button.

---

## Phase 2 — New pages (content supplied in the New Pages doc)

- [x] **2.1 Services & Amenities.** Client references theshoreclubtc.com/services-amenities/
      as the layout model. Content supplied: "Enhance Your Stay" intro + 12 add-on services
      (Dedicated Butler, Private Chef, Grocery Stocking, Privé Yacht Charters, Island Tours,
      Private Yoga, In-villa Massage, Championship Golf, Babysitting, VIP Airport Transfers,
      Car Rental, Local Transportation).
      *Note: "Dedicated Butler" is being removed from the villa pages as a standard service
      but appears here as a paid add-on — that's consistent, not a conflict.*
- [x] **2.2 Beach Grotto.** Short copy supplied. Needs imagery.
- [x] **2.3 Location.** Client says pull from the existing
      `/villa-for-sale-real-estate-investment/#location` section.
- [x] **2.4 About Us.** Copy supplied: Bespoke Villa Management, Developer (Hartling Group),
      Architects (RAD Design).

---

## Phase 3 — Navigation rebuild (depends on Phase 2 pages existing, and on 0.2)

- [x] **3.1 Rebuild the header.** Currently a hamburger that opens the "full screen nav"
      Elementor popup (template #3483) at all breakpoints. Client wants horizontal tabs with
      dropdowns on desktop; hamburger for mobile only. Header template is
      "Elementor Header #231", applied site-wide.
      Requested structure:
      - Vacation Villa Rentals → Azure Villa, Villa Blue Ocean, Forget-Me-Not, Serenità,
        Services & Amenities, Location, Beach Grotto, About Us
      - Real Estate Opportunities
      - Contact Us
- [ ] **3.2 Build the Contact Us landing page** with two routes: villa rental enquiries vs
      real estate enquiries. Two `Contact Us` pages already exist in the DB (IDs 168 and
      3824) — pick one, delete the other. Ninja Forms is the form plugin in use.

---

## Phase 4 — Home page

- [x] **4.1 Trim the hero video.** SOLVED properly: downloaded, trimmed, self-hosted. It's an Elementor background video: YouTube `TRUK4EKm5K8`,
      currently start 5s / end 40s. Need to shorten the end time so the Sotheby's card never
      appears. I'll find the exact timestamp and propose a value.
- [x] **4.2 Remove the "Explore the Villas" and "Investment Opportunity" buttons.**
      *(both confirmed present)*
- [x] **4.3 Put the villas in alphabetical order.** Currently Azure → Serenità →
      Forget-Me-Not → Villa Blue Ocean. Target order depends on the 1.5 rename:
      Azure Villa, Forget-Me-Not, Serenità, Villa Blue Ocean.
- [ ] **4.4 Crop the Azure photo** to remove the ground in front of the pool.
- [ ] **4.5a Tesla on the home page — NEW, needs a decision.** The home page's
      Forget-Me-Not blurb still says "a full solar system with Tesla battery storage".
      Jennifer's instruction was scoped to the villa page only, so I left it. But if the
      Tesla claim is being pulled because it isn't accurate, this one is equally wrong.
      Worth one line to Jennifer. Note the two are worded differently: the villa page said
      "battery backup during power interruptions" (a service promise), the home page says
      "battery storage" (a feature). She may object to one and not the other.
- [ ] **4.5 Heated pools — make it consistent.** Right now Forget-Me-Not says "Heated Private
      Pool", Serenità says "Heated overflow Jacuzzi", Villa Blue Ocean just says "Private
      pool". Client's point: partial labelling implies the others are NOT heated.
      **Blocked on client confirmation** of which pools are heated.
      Evidence gathered so far: SynXis lists Serenità and Forget-Me-Not as "Heated Pool
      (fee)" and says nothing about a heated pool for Blue Ocean. The home page separately
      describes Forget-Me-Not as having a "12 × 45 ft. propane-heated pool". So heating
      looks real but paid, on at least two villas.
- [x] **4.6 Typo (not in the client docs, found in audit):** home page reads
      "stuning Ocean views" → "Stunning Ocean Views".

---

## Phase 5 — Media swaps (needs assets from the client)

- [x] **5.1 Forget-Me-Not middle photo — client flagged ASAP.** Believed to be an old
      rendering, and not this villa. Need the correct photo.
- [x] **5.2 Villa Blue Ocean hero images.** Keep 1734 and 0309; replace 1665 and 0716 with
      8922 and 0826. Need those two files if not already in the media library.
- [ ] **5.3 Azure website description** — client is rewriting it to match the other three
      villas. Drop in when it arrives.
- [ ] **5.4 Photo Gallery review** — client hasn't reviewed the content yet. Two Photo Gallery
      pages exist (IDs 2698 and 3659); needs a decision on which survives.

---

## Phase 6 — Cleanup & pre-launch QA

- [x] **6.1 Duplicate page cleanup (not in the client docs — found in audit).** There are 47
      pages and roughly 20 are duplicates from a migration: two Homes, two Contact Us, two
      Photo Gallery, two of every Real Estate design page, etc. Live front page is ID 162.
      These will get indexed at launch and create duplicate-content and wrong-link problems.
      Needs a page-by-page keep/kill pass.
- [ ] **6.2 Broken link + anchor sweep** across the whole site (the `#more` issue in 1.6 is
      unlikely to be the only one).
- [ ] **6.3 Test every form end to end** — confirm submissions actually deliver, and to the
      right inbox for rental vs real estate.
- [ ] **6.4 Mobile pass** on every page, especially the new header.
- [ ] **6.5 SEO pass** — Yoast titles/descriptions on new pages, XML sitemap, confirm search
      engine visibility is ON at launch, canonical/redirects for any killed duplicates.
- [ ] **6.6 Housekeeping** — `wp-content/updraft` is 734MB of old backups and there are
      leftover `*-old` and `backup-migration-*` folders from the restore. Clear before launch.

---

## Phase 7 — Launch

- [ ] **7.1 Final client sign-off** on the staged site.
- [ ] **7.2 Domain cutover** per the 0.2 decision, SSL, www redirect.
- [ ] **7.3 Redirects** from old URLs (especially any killed duplicates).
- [ ] **7.4 Remove the preview gate** so the site is public.
- [ ] **7.5 Analytics / Search Console** connected and confirmed reporting.
- [ ] **7.6 Post-launch check** — crawl for 404s, retest forms on the live domain.

---

## Client questions (send as one list)

1. Are all four pools heated? If not, which ones? (drives 4.5)
2. Is there actually turn-down service? It's listed on Villa Blue Ocean and Forget-Me-Not.
3. Forget-Me-Not middle photo — please send the correct image. (flagged ASAP)
4. Villa Blue Ocean — please send images 8922 and 0826 if not already supplied.
5. Azure website description — confirm when the rewrite is ready.
6. Photo Gallery — please review the content and confirm what stays.
7. Contact Us — what email address should villa rental enquiries go to, and what address for
   real estate enquiries?
8. Confirm the final launch domain.

---

## Notes for whoever picks this up

- Header = Elementor template "Elementor Header #231" (site-wide). Footer = "#209" site-wide,
  with "#3644" overriding on three real-estate pages.
- The hamburger overlay is the Elementor popup "full screen nav" (#3483).
- The active theme is the Astra parent, not the `luxury-villas-at-blue-mountain` child. The
  child is an empty stock Astra child (no custom CSS or functions), so nothing is being lost —
  but any custom CSS we add should go somewhere that survives an Astra update.
- Menus in the DB: "Main menu" (#8, real-estate anchors), "villas" (#15, the 4 villa pages),
  "Main menu duplicate" (#16, hardcoded absolute URLs to villasatbluemountain.com — will
  break on this domain).


---

## Work log

**2026-09-03 — item 1 (Dedicated Butler) applied.**
Removed "Dedicated Butler & " from the Service row on Azure (3321) and Serenità (3298).
Both now read "Daily Housekeeping". Edited both `_elementor_data` AND the rendered
`post_content` copy, because Yoast builds the og:description from post_content and it
would otherwise still have advertised a butler on social shares. Elementor CSS cache
flushed. Blue Ocean and Forget-Me-Not left alone, still say "Daily Housekeeping &
Turn-down Service", pending Jennifer on 1.4.

Note for later: all four villas use `butler.svg` as the Service icon, including the two
that never mentioned a butler. It reads as a generic service icon, so I left it, but
worth a look when the four Service rows are finalised.

**2026-09-03 — item 2 (Tesla battery) applied.**
Removed the `<li>Tesla battery backup during power interruptions</li>` from the "Indoor
features" list inside the Indoor Living accordion on Forget-Me-Not (3373). Removed the
whole list item, not just the words, so there's no empty bullet. Updated `_elementor_data`
and `post_content`, validated the JSON before writing, flushed Elementor CSS. List now has
9 items, none blank.

Left alone deliberately: the home page still mentions Tesla battery storage in its
Forget-Me-Not blurb (see 4.5a). 109 old revisions also still contain the text; revisions
don't render, so they're harmless.

**2026-09-03 — item 3 (Azure Villa rename) applied.**
Azure page H1 was `Villa <b>Azure</b>`, now `<b>Azure</b> Villa`, so it renders
"Azure Villa" with the bold still on "Azure". Updated `_elementor_data` and `post_content`;
the Yoast og:description picked it up automatically and now opens "Azure Villa rooms: 5...".

Naming survey done at the same time. The other three H1s are `Villa <b>Blue Ocean</b>`,
`<b>FORGET-ME-NOT</b>`, `<b> Serenità</b>` (note the stray leading space in Serenità).
Jennifer's own doc says "Azure Villa" but "Villa Blue Ocean", so the prefix/suffix
difference is her wording, not an inconsistency to fix.

**Still saying just "Azure" (not wrong, but not the full name) — needs a decision:**
- page `<title>` / SEO title: "Azure - Villas at Blue Mountain" (from post_title "Azure")
- villas menu label: menu item 3492 has no custom label so it inherits post_title
- home page villa card H2: "Azure" (the others read "Serenità", "Forget-Me-Not",
  "Villa Blue Ocean")
- home page link text: "Explore Azure" plus two "Azure" links
Changing `post_title` to "Azure Villa" would fix the title and the menu in one move and
would NOT change the URL (slug stays `azure`).

**Cosmetic cruft, left alone:** five Elementor templates (3321, 3373, 3416, 3270, 3380)
carry alt text "Villa Azure, Vacation Villa Rental" on a background image with an EMPTY
url, so it never renders. Harmless, but it means a future search for "Villa Azure" will
still hit. Worth clearing in the Phase 6 tidy-up.

**2026-09-03 — Azure post title changed.**
`post_title` 3321: "Azure" -> "Azure Villa". Slug untouched, `/azure/` still returns 200.
Knock-on effects confirmed live: browser/SEO title is now "Azure Villa - Villas at Blue
Mountain", and the villas dropdown label follows the post title so it now reads
"Azure Villa" too.

Home page still reads "Azure" on the villa card heading and "Explore Azure" on the button
(both are hand-typed Elementor text, not driven by the post title). Logged for Jennifer as
question N2 rather than guessed at.

**2026-09-03 — item 4 (More Info link) fixed.**
Cause: the button targets `#more`, and the anchor is set as an Elementor CSS ID on the
"AT A GLANCE" divider section. Blue Ocean had it, Forget-Me-Not didn't. The two pages are
structurally identical (13 top-level sections, same order), so the counterpart section was
unambiguous: `42237bd8`.

Fix: added `_element_id: "more"` to that section. Both pages now render `id="more"` on the
AT A GLANCE divider and both More Info buttons land there.

Method note: adding a key meant re-encoding the JSON rather than a string swap, so the
script first proved a decode/encode round trip was byte-identical (181,219 bytes in and
out), then after the edit stripped the new key back out and confirmed the result matched
the original exactly. Net change +21 bytes, the one key. Worth reusing that pattern for any
future structural Elementor edit.

**Noticed, not changed:** only two of the four villas have a More Info button at all.
Blue Ocean and Forget-Me-Not do; Azure Villa and Serenità don't (no button, no anchor).
Logged for Jennifer as N3.

**2026-09-03 — item 4.2 (hero CTA boxes) removed.**
Both buttons lived in an inner section (`93101ba`) inside the hero whose only purpose was
to hold them, two 50% columns with one button each. Removed the whole wrapper rather than
just the two buttons, so no empty columns are left collapsing to stray padding. The hero
now ends on its intro paragraph.

Removed from `_elementor_data` (-13,147 bytes) and from the rendered `post_content`.
Verified by re-inserting the removed subtree into the result and confirming it re-encoded
byte-identical to the original, so nothing else on a 305KB page moved.

**The home page's og:description is a hand-written Yoast one**, not generated from content,
so social sharing was unaffected by this edit. Different from the villa pages.

**"Investment Opportunity" still appears twice on the home page** and that is correct for
now: it is nav menu item 3958 in "Main menu", rendered once for desktop and once for
mobile. Jennifer's instruction was about the hero boxes. The nav gets rebuilt in Phase 3
anyway, where "Investment Opportunity" becomes "Real Estate Opportunities".

Minor note: the removed "Explore the Villas" button pointed at `#explore`. Worth a glance
at whether that anchor existed at all, since a second dead anchor would fit the pattern of
1.6. Moot now that the button is gone.

**2026-09-03 — item 4.3 (alphabetical villas) done.**
Was Azure, Serenità, Forget-Me-Not, Villa Blue Ocean. Now Azure, Forget-Me-Not, Serenità,
Villa Blue Ocean. Azure and Blue Ocean were already in the right places, so it came down to
one swap of the Serenità and Forget-Me-Not blocks.

Checked layout before swapping: all four blocks are built the same way, image carousel left
and text right, with no left/right alternation. So a straight swap has no visual side
effect. Verified afterwards that each block moved intact, its subheading, body copy and
"Explore ..." button all travelled with it and each button still points at its own villa.

`post_content` regenerated through Elementor's own plain-text routine so its order matches
the page, guarded by a sanity check that would have rolled it back (all four names still
present, length not collapsed). It grew by 2 bytes and the order now reads
Azure -> Forget-Me-Not -> Serenità -> Blue Ocean.

**Depends on N2:** if Jennifer renames anything, the sort may need revisiting. As it stands
the order holds whether the first card reads "Azure" or "Azure Villa".

**2026-09-03 — item 4.6 (typo) fixed.**
Home page feature box read "stuning Ocean views " (misspelling plus a trailing space).
Now "Stunning ocean views", matching its three siblings ("Private pools", "Private beach
access", "Daily housekeeping"). Note these boxes are CSS-uppercased on the front end, so
the casing is invisible; only the spelling was ever visible. Only occurrence on the site.

**2026-09-03 — item 4.1 (hero video) INTERIM, needs a decision.**
Facts established: source is YouTube `TRUK4EKm5K8`, 43s long. The hero is an Elementor
background video that was playing 5s -> 40s. Changed to 5s -> 35s as a safer interim cut.

**But trimming may not fix what Jennifer is seeing.** A "Turks & Caicos Sotheby's" logo
sits in the bottom-right of the player, and it was already on screen at 0:30, ten seconds
before the old cut point. More telling: it stayed visible over a completely black buffering
frame, which means it is NOT burned into the footage. It is a YouTube player overlay
(channel watermark and/or end screen). Trimming the end cannot remove a watermark that is
present throughout.

Could not pin the exact second an end card appears; YouTube playback would not run reliably
in the automation browser.

**Recommendation: stop using a YouTube embed for the hero.** Self-hosting the MP4 removes
the channel watermark, the end screen, related-video cards and YouTube branding in one go,
and for a luxury brand hero that is the right answer regardless. It needs the source file
from whoever produced the video (likely Sotheby's or the Hartling marketing team).

Also spotted: a second YouTube video `4bmYLA9o0pk` is referenced on the home page. Not
looked at yet; worth checking what uses it during the Phase 6 sweep.

**2026-09-03 — hero video self-hosted. Item 4.1 fully closed.**
Downloaded the source with yt-dlp (1080p, 24MB) and confirmed by frame extraction exactly
what Jennifer meant. Clean footage runs to 39.8s, a fade to white starts at 40.0s, and the
Sotheby's end card holds from 40.6s to the end at 43.5s. The card advertises
"Turks & Caicos Sotheby's International Realty" with sales executive Dee Agingu's phone and
email, so the home page hero was ending on a competing brand's contact details.

**The corner logo is NOT in the file.** It's a YouTube channel watermark, added by the
player because the clip is served from Sotheby's channel. Self-hosting removes it for free,
along with the suggested-video thumbnails on pause.

Encoded 5s to 39.6s (the clean segment), 1600x900, CRF 29, audio stripped, faststart for
progressive streaming. 8.6MB. 1080p came out at 23MB which is too heavy for a hero; at
1600x900 behind the text overlay the difference isn't visible.

Media library IDs 4285 (video) and 4286 (poster frame). Because the file IS the loop, the
Elementor start/end offsets are cleared rather than set, so it loops seamlessly. The
YouTube-only `background_privacy_mode` setting was removed. Verified: no YouTube reference
left on the page, the mp4 serves as video/mp4 and honours range requests (206) so it streams
rather than downloading whole.

Ran `srv-gw fix-permissions` afterwards — wp-cli media import wrote the files as root:root.

**2026-09-03 — item 1.4 (turn-down service) done. PHASE 1 COMPLETE.**
Jennifer: "Go ahead and remove. I can always add back later if I am wrong." Removed from
Villa Blue Ocean and Forget-Me-Not. All four villas now read "Daily Housekeeping" in the
Service row, which was the underlying inconsistency behind both of her notes.

**2026-09-03 — assets received from Jennifer**, saved to `notes/assets-from-jennifer/`:
- `Villas at Blue Mountain 9 0843 (PANO).jpg` 2400x992 — the Forget-Me-Not replacement (5.1)
- `Villas at Blue Mountain 10 8922.jpg` 1800x1200 — Blue Ocean hero (5.2)
- `Villas at Blue Mountain 10 0826.jpg` 1800x1348 — Blue Ocean hero (5.2)
Azure copy for the 3 boxes arrived in a separate email (5.3).

**Her stated priorities changed the order:** "Items 3 and 4 are the least important!" —
that's the header rebuild and the home page. The home page work is already done. So the
header rebuild (Phase 3) drops down, and the new pages (Phase 2) plus booking links move up.

**2026-09-03 — item 2.1 Services & Amenities built.** Page ID 4287, `/services-amenities/`,
published (the site gate still keeps it private) and not yet linked from any menu.

Built to match the site rather than the Shore Club reference literally. Jennifer's reference
page uses a custom BW tabordion component that isn't installed here, so copying it would
have meant importing a plugin. Instead the page reuses the design language already on the
site, pulled out of the existing pages:
- headings Baskervville 45px / 28px mobile, secondary colour
- service names Montserrat 600 uppercase 16px, matching the villa "AT A GLANCE" labels
- body Montserrat 400
- template `elementor_header_footer`, same as the villa pages, so theme-builder header and
  footer apply

Structure: hero with the page title over `Villas-at-Blue-Mountain-0deco.jpg` (the dusk villa
shot, chosen because it reads hospitality rather than real estate) with a navy 40% overlay,
then "Enhance Your Stay" intro, then "Add-On Services" as a two-column list of all 12.

Copy is Jennifer's verbatim, with three light touches: em dashes replaced with commas to
match the rest of the site's punctuation, "In-villa" capitalised to "In-Villa" for
consistency with the other 11 titles, and curly apostrophes used throughout.

**Two things for Rian to decide:**
1. **Reading order.** The 12 run down the left column then down the right (1-6, 7-12), so
   scanning across pairs "Dedicated Butler" with "In-Villa Massages". Standard for a long
   two-column list, but if Jennifer's sequence matters when read across, it needs rebuilding
   as 6 rows of 2.
2. **Hero treatment.** The villa pages put the villa name in black on white *above* the
   image. This page puts the title in white *over* the image. Deliberate (the villa layout
   exists to carry the specs row and Book Now button) and it looks right, but it is a
   different pattern from the villa pages.

Confirmed the site is not full-bleed: villa hero images are inset with side margins too, so
the inset on this page is the site's own container width, not a mistake.

**2026-09-03 — items 2.2, 2.3, 2.4 built. PHASE 2 COMPLETE.**
All published (site gate still keeps them private), none linked from a menu yet.

| Page | ID | URL | Hero image |
|---|---|---|---|
| Services & Amenities | 4287 | /services-amenities/ | Villas-at-Blue-Mountain-0deco |
| Beach Grotto | 4289 | /beach-grotto/ | beach2 |
| Location | 4291 | /location/ | aerial-vbm |
| About Us | 4293 | /about-us/ | vbm-overview |

Same pattern on all four: centred hero title over an image with a navy 40% overlay, then
Baskervville H2 sections with Montserrat body, `elementor_header_footer` template.

**Copy decisions worth knowing:**
- **Beach Grotto** uses Jennifer's new copy, not the shorter version already on the real
  estate page. Fixed "also serves" to "also serve" (subject is plural) and added the
  possessive apostrophe to "Turks and Caicos'".
- **Location** is taken from the `#location` section of the real estate page as she asked.
  One deliberate change: the source ends "are an opportunity to invest in an exclusive
  community". This page sits under Vacation Villa Rentals, so investment language is off
  tone there; it now reads "places you in an exclusive community". **Flag to Jennifer.**
- **About Us** is her copy essentially verbatim, with "Conde Nast" corrected to
  "Condé Nast", "over 2 decades" to "over two decades", and "post completion" hyphenated.

**Corrected mid-build:** the Location "Getting Here" block originally listed
"Provo Golf & Country Club · 10 minutes". That drive time was not in any source, I had
inferred it from the golf service being mentioned elsewhere. Removed. Only the two
distances that come from Jennifer's own copy remain (airport 5 min, Grace Bay 10 min).
If she wants more distances listed she needs to supply them.

**Also noted:** the grotto photo (`Blue-Mountain-Villas_-beach-grotto.jpg`) is only
1000x668, so it displays at roughly native size and will look soft on high-DPI screens. A
larger original would be worth asking for. Separately, `beach-vacation-rental.jpg` in the
library is a generic stock family photo that doesn't look like TCI; not used on anything I
built, but worth checking it isn't used elsewhere before launch.

**2026-09-03 — new pages made full-bleed.**
Rian flagged the hero images looked inset next to the home page's full-width video. Cause
found by measuring rather than guessing: Astra's `.ast-container` caps content at 1240px on
the `elementor_header_footer` template. The home page escapes it with `_wp_page_template =
default` plus `site-content-layout = page-builder`.

Applied that same combination to all four new pages. Heroes now span the full viewport
(1372px measured, left edge 0) while the text sections keep their own 900px / 1140px widths.
Theme-builder header and footer both still render. Astra's `ast-site-content-layout =
full-width-stretched` alone did NOT work on the Elementor template, the page template had to
change.

Then two legibility fixes: hero overlay raised 0.40 -> 0.52 on the three bright aerial
heroes, and a soft shadow (0 1px 22px rgba(10,27,51,0.75)) added to all four hero titles.
The shadow is the durable part, it holds up whatever image gets swapped in later.

**2026-09-03 — booking links wired. Item 5 / booking done except Azure.**
All four villa Book Now buttons were `link: null`, rendering as `href="#"`. Now:

| Villa | Room code | Link |
|---|---|---|
| Villa Blue Ocean | BMBLU | deep link, filtered to that villa |
| Serenità | BMSER | deep link |
| Forget-Me-Not | BMFOR | deep link |
| Azure Villa | none | **INTERIM: property-level link** |

All open in a new tab. Every link carries `&nights=7` because the property has a 4-night
minimum and SynXis defaults to a 1-night search, which returns a discouraging
"not available" screen.

Verified BMFOR end to end in the browser (returns only "4 Bedroom - Forget-Me-Not - VBM").
BMBLU and BMSER were verified earlier. This matters because **an invalid room code fails
silently** in SynXis: it ignores the parameter and shows every villa, so a broken button
still looks like it works.

**Azure is the open item.** It has no room code in SynXis at all. Rather than leave a dead
`#`, its button now goes to the property-level booking page, which lists the other three.
That is functional but potentially confusing for someone who clicked Book Now on Azure.
Alternatives once Jennifer hears from Ray: a real room code (best), or relabel the button
to "Enquire" pointing at reservations@villasatbluemountain.com.

Book Now also appears in four unused `elementor_library` templates (3270, 3300, 3303, 3380).
They have no theme-builder conditions so they never render; left alone, worth clearing in
the Phase 6 tidy-up.

**2026-09-03 — items 5.1 and 5.2 photo swaps done.**
Jennifer's three attachments imported (IDs 4296 forget-me-not-0843-pano, 4297
villa-blue-ocean-8922, 4298 villa-blue-ocean-0826). Hers are **higher resolution than the
copies already in the library** (1800x1200 vs 1600x1067 etc.), so hers were used rather than
the existing ones.

**5.1 Forget-Me-Not "middle photo".** Identified as a column background image on the single
standalone photo between the hero and the lower content, file
`RAD_02BlueMountainVillas_21_T4_Pool_002-2.jpg`, alt text "Design T3 Ocean view". Jennifer
was right on both counts: it is a CGI architectural rendering, and it is a different
building entirely (flat roof, stone cladding, versus the real villa's white gabled roof).
Replaced with her 0843 PANO.

**5.2 Villa Blue Ocean hero.** The hero is a 4-slide Elementor Slides widget. Now reads
0309, 0826, 8922, 1734, exactly as asked. The `-1` suffixed copies of 0716 and 1665 still
appear in the page's 33-image lightbox gallery, which is a separate widget; her note was
about hero shots, so those were left. **Worth asking whether she wants them out of the
gallery too.**

**Found while doing this, all unasked-for and all worth raising:**

1. **Social share images are a mess across the site.** When a villa page is shared on
   Facebook or WhatsApp the preview image is:
   - Forget-Me-Not: was another RAD rendering (`_20_T4_Hero_002`), **fixed** to the new real
     photo since it was the same defect Jennifer flagged
   - Villa Blue Ocean: `t4-4-night-courtyard.jpg`, **also a CGI rendering** (verified by eye)
   - Serenità, Location, About Us, Services & Amenities: **none at all**, so they share with
     no preview image
   Only Azure and Beach Grotto have a real photo. This is a Phase 6 SEO item but it is
   visible to anyone who shares a link.

2. **Three villa pages show the identical lower slideshow.** Azure Villa, Forget-Me-Not and
   Villa Blue Ocean all run the same four 2023 photos further down the page
   (`Blue-Mountain-Villas_10/07/27/08`); Serenità shares the first of them. So a guest
   comparing villas sees the same pictures on each, which undercuts the "each villa offers
   its own character" line on the home page.

3. `azure-villa-rentral.jpeg` has a typo in the filename. Cosmetic only, but it is the
   Azure page's share image so the URL is public.

**2026-09-03 — item 3.1 header rebuilt. PHASE 3 (nav) DONE except the Contact page.**

New menu **"Primary Navigation"** (term 17), 11 items, exactly Jennifer's structure:
- **Vacation Villa Rentals** -> the home page (which is the rentals overview), dropdown of 8:
  Azure Villa, Forget-Me-Not, Serenità, Villa Blue Ocean, Services & Amenities, Location,
  Beach Grotto, About Us
- **Real Estate Opportunities** -> /villa-for-sale-real-estate-investment/
- **Contact Us** -> **/#contact  (INTERIM, see below)**

Header template 231: added a nav row inside the existing right-hand column, below the
phone/Email Us row, right-aligned. Styled to match the header (Montserrat 500, 13px,
uppercase, 1px letter-spacing, #D7CEC2 going to white on hover, navy dropdown panel).

Responsive split verified in the rendered classes:
- nav widget carries `elementor-hidden-tablet` + `elementor-hidden-mobile`
- hamburger icon carries `elementor-hidden-desktop`
So tabs on desktop, hamburger only below that, which is exactly what she asked for.

**The mobile popup needed fixing too.** The full-screen nav (popup 3483) pulls the `villas`
menu (term 15), which only had the 4 villas. Mobile visitors would have seen none of the new
pages. Added all four to that menu and reordered it to match the site
(Home, Azure Villa, Forget-Me-Not, Serenità, Villa Blue Ocean, then the new pages).
Verified all four new URLs now appear in both the desktop nav and the mobile popup.

**The four new pages are no longer orphaned** — that was the whole point of doing this.

**Contact Us is the remaining gap.** Both existing Contact Us pages (168 and 3824) are
completely empty, no content and no Elementor data. Jennifer wants a page offering a choice
between villa rental and real estate enquiries, but the real estate routing is still open
(question O5). So the menu item points at the home page's `#contact` section for now, which
is a real working Ninja Form. **This must be replaced before launch.**

**Not visually confirmed:** the dropdown markup, hrefs and responsive classes are all
correct in the HTML, and the nav row renders as intended, but the browser tooling failed
before the hover state could be captured. Worth Rian hovering "Vacation Villa Rentals" once
to confirm the panel opens and reads well over the hero.

**2026-09-03 — client contact changed, and the hosting decision is made.**
Jennifer has handed over to **Karen Whitt** (VP Sales + Marketing, Hartling Group). Karen
is hard to reach by email and needs WhatsApp. She also has a habit of not responding and
then objecting later, so every open decision put to her now carries a stated default:
silence becomes a decision she made, not one we made alone. Keep the sent messages.

DNS access obtained. **Decision: stay on Gab's host rather than migrate to Cloudways**, on
the grounds that changing host during a rushed launch adds risk for little gain. So the
DNS/hosting blocker is closed; item 7.2 becomes a cutover on the existing host.

Drafts written: `notes/email-to-karen.txt` (fuller summary, five decisions) and
`notes/whatsapp-to-karen.txt` (the four that actually matter, plus the reasoning for what
was left out).

**The four escalated to Karen**, filtered by "what would she be angry to see live":
Azure not bookable · real estate enquiries going nowhere · the pool contradiction between
the site and the booking engine · and that launching replaces the current
villasatbluemountain.com. Everything else stayed in the email.

**2026-09-03 — CORRECTION: the shared lower slideshow is not a defect.**
Earlier I flagged that three villa pages show an identical set of four photos and treated it
as a problem. Rian pushed back, and he was right. The section is headed **"The Beach"** and
all four images are of the shared beachfront and grotto, not of any individual villa. Same
photos on every villa page is correct, because it is a shared amenity. Removed from the
Karen email and from question O11.

Lesson: check what a section is *for* before calling repetition a bug.

**Found while checking that: "The BEach" typo** (capital E) in that section heading on all
four villa pages. Fixed in both the layout and the rendered copy. Also present in three
unused elementor_library templates, left alone.

**2026-09-03 — social preview images fixed across the site.**
Yoast was auto-deriving preview images from page content, and picking badly. Set explicit
ones on every page:

| Page | Was | Now |
|---|---|---|
| Home | `New-T5-Night-Exterior.jpg` (**a CGI rendering**) | multivilla.jpg |
| Azure Villa | auto, 770x550 (too small for social) | azure2.jpg |
| Serenità | none | Serenita-1.jpg |
| Forget-Me-Not | `RAD_..._20_T4_Hero_002.jpg` (rendering) | forget-me-not-0843-pano.jpg |
| Villa Blue Ocean | `t4-4-night-courtyard.jpg` (rendering) | 0309.jpg |
| Services & Amenities | none | 0deco.jpg |
| Beach Grotto | none | beach2.jpg |
| Location | none | aerial-vbm.jpg |
| About Us | none | vbm-overview.jpg |

**The home page one mattered most** — it is the most-shared link on the site and it was a
CGI rendering of a house that may not exist. All replacements verified 1200x630 or larger,
which is Facebook's minimum.

**Deliberately left as a rendering:** the real estate page
(`New-T5-Night-Exterior-2100-1.jpg`). Renderings are normal in property sales; the problem
is only when a rental guest is shown a rendering of the villa they are booking.

**2026-09-03 — item 6.1 duplicate pages cleaned.**
19 pages trashed, not deleted, so all reversible from the WordPress trash. Only the
2026-08-25 import copies went; the original of every pair was kept. Verified afterwards
that all 13 reachable pages still return 200 and the trashed URLs now 404.

**A near miss worth recording.** My first reference check queried `_elementor_data` with
`LIKE '%/slug/%'` and reported that NOTHING was linked, including the legal pages. That was
a **false negative**: Elementor stores URLs with escaped slashes (`\/slug\/`), so the
pattern never matched. Checking the *rendered* HTML instead showed the footer does link
Privacy Policy, Legal Disclaimer and Photo Gallery. Acting on the first result would have
deleted live legal pages.
Rule: verify "is this referenced" against rendered output, not against the stored JSON.

Still present and NOT touched: roughly 17 orphaned legacy pages (the original T2-T5 real
estate pages, News, Our Team, Development Overview and so on) plus the default "Sample
Page". None are linked from anywhere. Deleting them is a content decision for Karen, not a
cleanup call, since real estate is her area.

**2026-09-03 — pre-launch backup of the LIVE site taken.**
Host is a control panel at panel.server263.com, account `bluemountain`, server263.com.

Layout of that account:
| Domain | Path | Database |
|---|---|---|
| villasatbluemountain.com (main) | `www/www` | `bluemountain_re` |
| luxury.villasatbluemountain.com | `www/luxury` | the staging site we copied from |
| rentals.villasatbluemountain.com | `www/rentals` | the old rentals site |

`bluemountain.tc` is parked to the main domain.

Backup created via WordPress Manager on the `www/www` install:
**"Pre-launch snapshot of live real estate site before replacement", Sep 3 2026 04:23 PM,
1.5GB**, task #5709, finished in about a minute. It offers one-click **Restore**, plus
Download and Open in File Manager. Disk use went 17,343MB to 18,978MB, consistent with it.
Before this there was NO backup of that install at all.

**Findings that change the launch plan:**
1. **No database work is needed to get admin access.** WordPress Manager has a "WordPress
   administrators" panel with a one-click login arrow next to the existing `admin` account
   (gab@adventurescape.com). Cleaner than inserting a user row, and it leaves a panel audit
   trail.
2. **The live install's Site URL is `villas.webshoptci.com`, not villasatbluemountain.com.**
   The real estate site was evidently built under another domain and never fully re-pointed.
   Expect redirect and mixed-URL trouble during any migration; the panel has a
   "change Site URL / copy / move" tool that can fix it.
3. The panel also offers staging, phpMyAdmin, Web SSH, File Manager and Git.

**Outstanding risk:** the backup sits on the same host we intend to overwrite. Worth pulling
a copy off-host before the push.

**2026-09-03 — LAUNCHED on villasatbluemountain.com.**

Route taken: server-side clone from `www/luxury` to `www/www`, not another UpdraftPlus
restore. SSH access was added to the hosting account (dedicated ed25519 key, public key
imported through the panel's SSH Keys tab; password auth was already disabled there). The
host turned out to have wp-cli, mysql, mysqldump and rsync, which made the whole thing a
four-command operation instead of a 1GB upload and a restore log.

Corrections to earlier assumptions, both mine:
- The live install's URL was **never** `villas.webshoptci.com`. Both `wp-config.php` and the
  database already said `https://villasatbluemountain.com`; the panel's display was stale.
  The "fix wp-config first" step in the go-live runbook was unnecessary and sent Rian
  hunting for a file that didn't need editing.
- Both installs use the `wp_` prefix, so that check was moot too.

The four commands: `wp db export` from luxury piped into `wp db import` on www; `rsync` of
wp-content excluding the backup blobs; `wp search-replace luxury.villasatbluemountain.com ->
villasatbluemountain.com` (6,930 replacements); `wp elementor flush-css`.

**The one thing that made it look broken:** after all four succeeded the home page still
served the old real estate site. The database was already correct (`page_on_front` = 162).
It was the panel's **server-side page cache**. One click of Purge and the new site appeared.
Worth remembering: on this host, nothing looks changed until that cache is purged.

Rollback available on three layers: the on-server set in
`~/private/prelaunch-rollback-2026-09-03/` (15MB db + 723MB wp-content + wp-config, 600
perms, outside the web root), the panel's 1.5GB one-click backup, and Rian's local download.

**Verified live:** all 13 pages return 200. Hero video serves as video/mp4. Every Elementor
background image loads (9/9 Azure, 9/9 Forget-Me-Not, 9/9 Serenità, 8/8 Blue Ocean, 5/5 home,
1/1 on each new page) with zero broken and zero stale domains. Booking links resolve to
BMFOR, BMSER and BMBLU; Azure still at property level.

**Two cosmetic leftovers, neither breaking a page:**
- The real estate page has ~24 Revolution Slider image paths still pointing at the luxury
  subdomain. wp-cli warned during the replace: "Skipping an uninitialized class
  RevSliderUpdate, replacements might not be complete." Those images still load, just from
  the wrong host. Needs a revslider-aware fix or a re-save of the slider.
- The Legal Disclaimer page has the luxury URL written into its body copy in three places.
  Plain text edit.

**2026-09-03 — Azure booking link SOLVED and live.**
Azure's room code is **`BMAZR5A`**, not the `BMAZU` I had guessed. It follows a different
pattern because **Azure is a 5 bedroom villa** while the other three are 4 bedroom, which
also matches Jennifer's new copy describing five bedrooms. It never showed in my original
10-17 November search purely because it had no availability then; Rian's 1-5 November range
surfaced it immediately. Listed at $3,600/night.

Deep link verified to filter to Azure alone, then applied to the live site with a targeted
search-replace (the property-level URL existed only on the Azure page, so the replace was
unambiguous - 1 replacement). All four villas now carry room-specific booking links:
BMAZR5A, BMFOR, BMSER, BMBLU.

**Note for Jennifer/Karen:** the booking engine itself still calls it "Villa Azure" in the
rate name ("5 Bedroom - Villa Azure - Villas at Blue Mountain") even though the room name is
"Azure Villa". Since she asked us to standardise on Azure Villa, someone should fix that in
SynXis too, or the site and the checkout will disagree.

**2026-09-03 — post-launch pass.**

**Stale domain references: all gone.** After the cutover, 11 pages still carried
`luxury.villasatbluemountain.com`. Two causes, two fixes:
- Revolution Slider rows. wp-cli warned "Skipping an uninitialized class RevSliderUpdate"
  and skipped them. Checked the actual column contents first: revslider stores **JSON**, not
  PHP-serialized data, so a plain `REPLACE()` was safe (no length prefixes to corrupt).
  8 rows across 4 tables fixed directly.
- My own error: I first ran the replace scoped to `wp_posts` only, missing `wp_postmeta`
  where Elementor lives. Re-ran with `--all-tables`, 3,511 more replacements.
All 30 pages now verified clean.

**Luxury staging retired.** Path-preserving 301 added to `www/luxury/.htaccess` (original
saved as `.htaccess.backup-before-redirect-2026-09-03`). Because staging was a clone with
identical slugs, a single path-preserving rule IS a page-for-page redirect. Verified:
`/services-amenities/`, `/azure/`, `/forget-me-not/`, `/about-us/` and `/` all 301 to their
exact counterparts, and the destination returns 200.

**Navigation restyled.** Karen was expected to dislike it. It was cramped bottom-right with
a heavy white underline bar and a dated filled triangle. Now: 24px item padding, 1.8px
letterspacing, 400 weight, a light chevron, no pointer bar at all (colour change on hover
instead, which is how the other Hartling sites handle it), and breathing room above and
below. Not the Shore Club's custom component, but it now reads as designed rather than
squeezed in.

**Site sweep — issues still outstanding:**
1. **17 orphaned legacy pages are in the XML sitemap** and will get indexed. Includes
   **`/sample-page/`** (the WordPress default page, on a luxury property site) and
   **`/home/`**, an orphan duplicate competing with the real front page. The rest are the
   old T2-T5 real estate design pages, News, Our Team, Development Overview and similar.
   None are linked from anywhere. Recommend: delete Sample Page, and noindex or remove the
   others. This is a content decision on Karen's side for the real estate ones.
2. **No meta description on a single page.** Yoast is installed but nothing is set, so
   Google will invent snippets for every page.
3. One mixed-content asset (`http://`) on the real estate page.
4. Two dead anchors on the real estate page: `#stan-hartling`, `#sitemap`.
5. Rentals subdomain still live and not yet redirected.

**2026-09-03 — Sample Page removed from live.** Trashed (reversible); `/sample-page/` now
404s. It was in the XML sitemap, so it was on its way to being indexed.

**2026-09-03 — dropdown thumbnails prototyped on demoing.**
Rejected Elementor's native Mega Menu widget: its experiment is inactive and enabling it
also requires the `container` and `nested-elements` experiments, which change editing
behaviour site-wide. Not a change to make on a just-launched site for a cosmetic win.

Instead, kept the existing nav-menu widget and added scoped custom CSS to it, giving each
dropdown item a villa thumbnail on the left. 8 images, 360px dropdown, a hairline separator
between the four villas and the four supporting pages, and a small slide on hover.

Why this route: no new widget, no new plugin, no structural change. The CSS lives in the
nav-menu widget's own `custom_css`, so it travels with the header template and is removed by
clearing one field. Thumbnails use existing 300px-wide WordPress crops, so no new assets and
negligible weight.

Note the demoing screenshot still shows the OLD heavy underline on the parent item, because
the nav restyle was applied to live only. On live the two combine.

**2026-09-04 — heated pool claims removed from live.**
Karen corrected Jennifer: not all four villas are heated, only two, and it is chargeable.
She is still deciding on wording, but the claim was already live, which was exactly the risk
she described.

Checked the stored Elementor data rather than the rendered text and found **five**
occurrences, not the three the rendered scan had shown:
- home page, Serenità card heading: "Private pool · Heated overflow Jacuzzi"
- home page, Forget-Me-Not card heading: "Ocean-View Villa with Heated Private Pool"
- home page, Serenità body: "an electrically heated overflow Jacuzzi"
- home page, Forget-Me-Not body: "12 × 45 ft. propane-heated pool"
- Forget-Me-Not page body: "a 45-foot heated pool"

All five removed. Copy still reads naturally ("Private pool · Overflow Jacuzzi", "an
impressive 12 × 45 ft. pool"). Zero mentions of heating remain. Reversible when Karen
settles the wording. Lesson: for claims that carry commercial risk, search the stored data,
not the rendered page.

**2026-09-04 — Contact page built. Last item from the original brief closed.**
Built into the existing empty stub (page 168, `/contact-us/`), so the clean slug is kept and
no new page was created. The script refused to run unless the page was genuinely empty.
Two routes as Karen specified, Pat first:
- **Villa Rentals** -> reservations@villasatbluemountain.com, +1 888 808 9488
- **Real Estate** -> Pat Staples (patrick@tcsothebysrealty.com, 649 432 3222), then
  Ben Hartling (ben.hartling@hartlinggroup.com, 649 232 4489)
Same design language and full-bleed hero as the other new pages, social preview set.
The nav item was repointed from the temporary `/#contact` anchor to the real page.

**Found doing it — the site now shows two different reservations addresses:**
- The new Contact page and Jennifer's instruction say `reservations@villasatbluemountain.com`
- The header "Email Us" link still says `reservations@bluemountain.tc`
- The live enquiry form (Ninja Forms action 7) still delivers to `reservations@bluemountain.tc`
- A second form action still delivers to `{system:admin_email}`, which is still
  `gab@adventurescape.com`

Not changed, deliberately. If `reservations@villasatbluemountain.com` is not a real mailbox,
switching the form would silently drop enquiries, which is worse than the inconsistency.
Needs someone to confirm the mailbox exists (panel > Mail Manager) before the form recipient
and header link are moved.

**2026-09-04 — all reservations addresses consolidated.**
Everything now points at `reservations@villasatbluemountain.com`:
- Enquiry form (Ninja Forms action 7) — was `reservations@bluemountain.tc`
- Contact form (action 3) — was `{system:admin_email}`, i.e. **gab@adventurescape.com**, so
  enquiries had been routing to the outgoing developer
- Header "Email Us" link and every other display reference (100 replacements across tables)

Verified: zero `bluemountain.tc` references remain anywhere on the rendered site.

Diligence done before switching: MX for **both** `villasatbluemountain.com` and
`bluemountain.tc` resolves to `192.252.144.13`, the same host as this account, so mail for
the domain is handled here rather than at some third-party provider. That does not prove the
specific mailbox exists, and the account's mail directories are not visible to the SSH user,
so it could not be confirmed from the server side.

**Still needs one human check: send a real enquiry through the live form and confirm it
arrives.** If the mailbox does not exist the likely outcome is a bounce, which is visible,
but a discard-style catch-all would swallow it silently. One test submission settles it.

**Still outstanding:** WordPress `admin_email` is still `gab@adventurescape.com`. That is no
longer receiving enquiries, but it still receives WordPress system mail, including password
resets. Changing it sends a confirmation to the new address, so it needs doing deliberately.

**2026-09-04 — masthead gap fixed. My bug, from the nav restyle.**
Rian spotted a thin gap above and below the navy header bar.

Cause: when I applied spacing to the nav row, my walk matched sections whose JSON contained
both `"nav-menu"` and `hidden-tablet`. The **outer header section** (`31739893`) contains the
nav widget in its subtree, so it matched too and got `margin: 16px top / 6px bottom` — which
is exactly the gap. The inner nav row (`4aa7f01`) was the only intended target.

The warning was in my own output at the time: the script printed "nav row spacing applied
(2)" when only one section should have matched. I didn't chase the 2.

Fixed by removing margin (desktop, tablet and mobile) from `31739893` only. Verified: header
now sits at top 0 with margin-top and margin-bottom both 0. Inner nav row spacing kept.

Lesson: when matching Elementor elements by searching a serialised subtree, parents match
too. Match on the element's own properties, or assert the expected count and stop when it
differs.

**2026-09-04 — rentals subdomain retired with a hand-built map.**
Not a blanket redirect: the rentals site was built on a different theme with an unrelated URL
structure (`/rooms/`, `/pf/`, `/news-page/`), so a wildcard would have 301'd every old URL
into a 404. Eight specific mappings plus a catch-all:

| Old | New |
|---|---|
| /about-us/ | /about-us/ |
| /services/ | /services-amenities/ |
| /contact/ | /contact-us/ |
| /gallery/ | /photo-gallery/ |
| /how-to-get-to-villas-at-blue-mountain/ | /location/ |
| /location-how-to-find-us/ | /location/ |
| /pf/azure-villa-rental-turks-caicos/ | /azure/ |
| /thank-you-azure-villa/ | /azure/ |
| everything else | / |

Azure is the only villa with a real counterpart; Cobalt is out of the group, and rates,
virtual tours, testimonials and the theme demo posts have no equivalent, so they fall back to
the homepage. All 12 tested rules return 301 to the right target. Original `.htaccess` saved
as `.htaccess.backup-before-redirect-2026-09-04`.

**2026-09-04 — orphaned pages cleaned. Sitemap 29 pages -> 17.**
Re-derived the orphan list against what is actually linked from the live site rather than
reusing the earlier list, since the Contact page build and the real estate page had changed
it. 12 orphans found, handled in two ways:

**Trashed (2)** — actively harmful, both reversible:
- `/home/` — a duplicate of the real front page, competing with `/` for the same terms
- `/rental-program/` — completely empty

**Noindexed but kept published (10)** — `/development-overview/`, `/management-services/`,
`/our-team/`, `/turks-and-caicos-islands/`, `/news/`, `/flights-to-providenciales/` and the
four real estate design pages (T2, T3, T3-4bed, T4).

Deliberately did not delete the real estate design pages. They hold real product content
(3.7k-11k characters each), they are Karen's area, and nothing about being unlinked means
she wants them gone. Noindex removes the duplicate-content problem while leaving the content
recoverable and one setting away from being live again.

Verified: all ten are out of the XML sitemap, the two trashed pages 404, and every linked
page still returns 200.

**Worth raising with Karen:** those four real estate design pages exist, have substantial
content, and nothing on the site links to them. Either they should be linked from the Real
Estate page or retired properly. Right now they are invisible to both visitors and search.
