# Migration runbook - demoing to Gab's host
Prepared 3 September 2026.

## What is ready

Two files in `/srv/apps/villasatbluemountain/migration/`:

| File | Size | What it is |
|---|---|---|
| `vbm-db-2026-09-03.sql.gz` | 17MB | Full database, 91 tables, all of today's work |
| `vbm-new-uploads-2026-09.tar.gz` | 15MB | The new media only (hero video, poster, 3 replacement photos) |

**32MB total, not 1GB.** Only 47 files changed on disk today, and all but the new media were
Elementor CSS caches that regenerate themselves. So the migration is the database plus one
uploads folder, nothing else. Themes and plugins are untouched and already identical, because
our copy came from that host this morning.

## Backups taken (both restorable with one click in WordPress Manager)

| Install | Size | Task |
|---|---|---|
| `www/www` (live real estate site) | 1.5GB | #5709, 04:23 PM |
| `www/luxury` (Gab's staging) | 2.2GB | #5710, 04:34 PM |

Neither existed before. A download of the `www/www` one was also started to get a copy
off-host.

## Steps

### 1. Check the table prefix first
Our database uses the `wp_` prefix. Open `www/luxury/wp-config.php` in the panel's File
Editor and confirm `$table_prefix` is also `wp_`. **If it differs, stop** and say so, because
the import will produce a site that loads but is empty.

### 2. Upload the two files
Panel > File Manager, into `www/luxury/`. Or FTP if that is easier for files this size.

### 3. Import the database
Panel > phpMyAdmin, into database `bluemountain_wp05ac2c7d208868338f86f8932fa7f5fe`.
Drop the existing tables first, then import. This replaces Gab's staging content entirely,
which is why we backed it up.

### 4. Extract the media
Into `www/luxury/wp-content/uploads/` so it creates `uploads/2026/09/`.

### 5. Rewrite the URLs
The database still contains `villasatbluemountain.demoing.info` in about 14,000 places.
Via the panel's Web SSH Terminal:

    cd ~/www/luxury
    wp search-replace 'villasatbluemountain.demoing.info' 'luxury.villasatbluemountain.com' --all-tables --precise --report-changed-only

**Do not do this with a text editor on the SQL file.** WordPress stores serialized data with
character counts baked in, and a plain find-and-replace corrupts it. wp-cli and the Better
Search Replace plugin both handle it properly; nothing else does.

If wp-cli is unavailable over SSH, use the Better Search Replace plugin from
`luxury.villasatbluemountain.com/wp-admin` instead, with "Run as dry run" unticked.

### 6. Check it
Load `https://luxury.villasatbluemountain.com` and confirm: new navigation with the
dropdown, the four new pages, hero video playing, Book Now going to the booking engine.

### 7. Only then, go to the main domain
Once staging is right, move it across with the panel's Site URL change/move tool, or repoint
the document root. `www/www` stays untouched until that moment, so the rollback is always
one click.

## Two things to sort before launch, unrelated to the migration

**The site's admin email is `gab@adventurescape.com`.** That address receives WordPress
system mail, and the "Contact Me" form is configured to send to whatever the admin email is.
It should not be the outgoing developer.

**The live enquiry form sends to `reservations@bluemountain.tc`.** Jennifer said villa rental
enquiries should go to `reservations@villasatbluemountain.com`. These are different addresses.
`bluemountain.tc` is a parked domain on this hosting account with mailboxes on it, so it may
well be monitored, but it does not match what we were told. Worth confirming before go live,
because this is the form on every page.

## Smaller things found

- Two dead anchor links on the real estate page: `#stan-hartling` and `#sitemap`.
- The live install's Site URL is `villas.webshoptci.com`, not villasatbluemountain.com.
  Expect that to need correcting during the final move.
- Search engine visibility is ON, which is correct for launch.
