Skip to content

Client Offboarding

Client Offboarding & Data Extraction Runbook

1. Purpose & Data Ownership Principle

Clients retain full ownership of their business content, inquiry records, and uploaded media assets. When a client offboards from SiteSwarm, this runbook governs how their data is extracted cleanly across each storage pattern defined in DATA_STORAGE_PATTERN.md and how their custom domain is disconnected without disrupting their email or DNS zone.


2. Step-by-Step Offboarding Checklist

Step 1 — Export Client Data & Media Assets

  • App-Hosted Storage (app-hosted Dedicated D1 & R2):
    • Export the client’s dedicated Cloudflare D1 database to a portable SQLite .sql dump (wrangler d1 export <client-db-name> --remote --output=<client>-export.sql).
    • Download all objects from the client’s dedicated R2 bucket or tenant prefix into a portable media archive.
  • Platform-Hosted Shared Storage (platform-hosted Services):
    • Query and export all records scoped to the client’s tenant_id (WHERE tenant_id = ?) into portable JSON or CSV files.
  • External Database (If Using Anticipated Hyperdrive Pattern):
    • The client already owns the external database instance; verify no pending writes remain and remove the Hyperdrive binding.

Step 2 — Coordinate Custom Domain Cutover

  • Coordinate with the client’s technical contact to point their CNAME (or flattened apex) record at their registrar to their new hosting provider.
  • Once DNS propagation away from SiteSwarm is confirmed, delete the client’s Custom Hostname entry and Worker Routes (<client>-ingress.<platform-domain>/* and www.<client-domain>.com/*) from the SiteSwarm Cloudflare zone (CLOUDFLARE_FOR_PLATFORMS_AND_DOMAIN_INGRESS.md).

Step 3 — Decommission Workers & Archive Workspace

  • Delete the client’s production and staging Cloudflare Worker scripts (apps/<client> and any app-hosted backing service workers).
  • Retain the exported SQLite and media archive for the agreed post-offboarding retention window before deleting the Cloudflare D1 database and R2 bucket.