Process · internal

Hosting and Account Handover

How OH CHEESE! and London Waffle Co. move into accounts the clients own, and the standard steps for every future client.

Prepared 8 November 2026
Shon [Surname]

The rule

Every account is opened with the client's business email, the client holds the owner login and two-step verification, and I'm a team member. Nothing a client pays for, or depends on, sits in my personal accounts after launch. This is how I can promise "you own everything" in the proposal, and how another developer can take over without me.

Accounts each client needs

AccountOwnerMy accessCost to client
Business email (Google Workspace or a dedicated Gmail)ClientNoneFree with Gmail, or a paid Google Workspace plan
Domain registrarClientNone, or delegate if offeredYearly domain fee
Cloudflare (DNS, hosting, analytics)Client, Super AdministratorAdministrator memberFree plan
GitHub (code)Client account or organisationCollaborator with write accessFree
Google Business ProfileClient, primary ownerManagerFree
Meta Business portfolio and WhatsApp Business Account (WhatsApp Orders only)Client, adminPartner or employee with WhatsApp accessMeta's per-message charges

Cloudflare Registrar does not sell .in domains, so a .in domain is bought at another registrar in the client's name and its nameservers point to the client's Cloudflare account.

Standard process (every project)

At signing

  1. Ask for a business email the client will keep (for example orders@ or a dedicated Gmail), not a staff member's personal address. Two-step verification goes on a phone the owner controls.
  2. On a 30-minute call, the client signs up for each account while sharing their screen. They type every password and keep it in their own password manager. I never ask for passwords over WhatsApp.
  3. The client invites me: Cloudflare (Manage Account, Members, Administrator), GitHub (repository collaborator), Google Business Profile (Manager), Meta (Business settings, Partners, my business ID).
  4. The client buys the domain with their own card, auto-renew on, and sets its nameservers to the two Cloudflare nameservers shown in their account.

During the build

  1. Previews stay in my account (thisis-shon.com) so the client's account stays clean until launch.
  2. Code lives in a private GitHub repository; the README explains how to run, edit and deploy it.

At launch

  1. In the client's Cloudflare account: Workers and Pages, Create, Import a repository, connect their GitHub. Build command npm run build, output dist. Every push to main then redeploys on its own.
  2. Add the custom domain to the Worker, check HTTPS, then turn on Web Analytics.
  3. Transfer the repository: GitHub, Settings, Danger zone, Transfer ownership, to the client's account. I keep collaborator access only if they take the care plan or an add-on that needs it.
  4. Delete the preview Worker and route from my Cloudflare account, and remove any preview subdomain.
  5. Send the handover sheet (below) as a PDF, and walk the owner through logging in to each account once.

No care plan, care plan ends, or another developer takes over

  1. The client removes me (or I remove myself) from Cloudflare, GitHub, Google and Meta, and I confirm in writing.
  2. The new developer is invited as a member by the client. Nothing needs to move, because everything is already in the client's name.

Handover sheet (given to the client)

ItemWhat it contains
AccountsEach service, its login URL, the email it uses, and who has access. No passwords.
Where things areDomain registrar, Cloudflare account, GitHub repository, WhatsApp number and Meta portfolio.
Updating the siteWhich file holds prices, products and stores, and that a change pushed to GitHub goes live in about a minute.
RenewalsDomain renewal date and card, and Meta billing.
HelpMy contact if they take the care plan, and a short brief another developer can follow (stack, build command, hosting).

OH CHEESE! (My Cheesy Story)

TodayAfter handover
Codegithub.com/thisisshon/ohcheese (mine)Client's GitHub account
HostingWorker ohcheese on my Cloudflare, at ohcheese.thisis-shon.comWorker in client's Cloudflare, connected to their repository
DomainNone[ohcheese.in or similar], bought by the client
OrderingBasket sends a typed WhatsApp message to +91 98116 06737Same, plus the WhatsApp Orders dashboard if chosen
GoogleNo profileGoogle Business Profile, client is owner (if the add-on is chosen)

Steps

  1. Get a brand email (for example hello.ohcheese@gmail.com). The order number +91 98116 06737 belongs to Aaliya: confirm who owns it before it goes on the site and on Meta.
  2. Create the Cloudflare, GitHub and Google accounts with that email and invite me, as in the standard process.
  3. Prepare the production build: keep only the chosen direction, remove the version switcher and the ten version routes, and serve the chosen home at the root.
  4. If they take WhatsApp Orders: the client creates a Meta Business portfolio at business.facebook.com with the brand email, submits verification documents (GST or trade licence, utility bill), adds a WhatsApp Business Account and registers the number. Plan for Meta review to take a few days. They add me as a partner, and the API token and webhook live in their portfolio and Cloudflare account, never mine.
  5. Point the domain at the client's Cloudflare, connect the repository, add the domain to the Worker, test an order end to end on a phone.
  6. Transfer the repository, delete ohcheese.thisis-shon.com from my account, send the handover sheet.

Found while reviewing the preview: on phones the Range page shows the desktop layout as well as the mobile one (the layout switcher un-hides it), and an empty checkout shows a total of INR 80 with nothing in the basket. Both are to be fixed before launch.

London Waffle Co.

TodayAfter handover
Codegithub.com/thisisshon/london-waffle-co (mine)Client's GitHub account
HostingLive site on Wix at thelondonwaffle.in; my preview at thisis-shon.com/lw-revamp (Worker lw-revamp)Worker in client's Cloudflare, serving thelondonwaffle.in
Domainthelondonwaffle.in, registrar not yet confirmedSame domain, nameservers on the client's Cloudflare
OrderingOrder Now goes to ZomatoSame; optional WhatsApp button for franchise and bulk enquiries
EmailA personal Gmail is listed on the siteA brand address such as hello@thelondonwaffle.in

Steps

  1. Find out where thelondonwaffle.in is registered (Wix or another registrar) and who holds that login. If it's in Wix, either keep it there and change nameservers, or transfer it to a registrar in the owner's name.
  2. Before touching DNS, write down every existing record, especially MX records if any email runs on the domain, and Google or Meta verification records. Recreate them in Cloudflare first.
  3. Create the Cloudflare and GitHub accounts with the brand email and invite me.
  4. Prepare the production build: pick one of the five options, remove the /lw-revamp/ base path so the site serves from the root, and redirect old Wix page URLs to the new pages so search rankings carry over.
  5. Switch the nameservers in a quiet hour, check the site and email, then cancel the Wix plan only after a week of the new site running without issues.
  6. Google: claim the existing profiles for each counter under the brand email, merge the duplicates (Marina Mall, BSR Mall) and add the website link.
  7. WhatsApp (optional): a click-to-chat button needs only the number, with nothing to hand over. Use the WhatsApp Business API only if they want an order or enquiry dashboard; then the same Meta steps as OH CHEESE! apply.
  8. Transfer the repository, delete the lw-revamp Worker and route from my account, send the handover sheet.

This is a repeat client, so set the accounts up properly now. The next project can then go into the same Cloudflare and GitHub accounts with no new setup.

Hosting handover · Process