It is possible with Vercel to move a custom domain between projects without downtime.
Using the Vercel CLI command
vercel alias, it is possible to alias the custom domain to another Vercel project's Deployment, even though the domain is already assigned to a project. You can run the following command:
vercel alias set [deployment-url-on-new-project] [custom-domain]
Make sure to use the Automatic URL for the
[deployment-url-on-new-project] parameter (e.g.
[<project-name>-<unique-hash>-<scope-slug>.vercel.app]). Also, make sure to not include the HTTP protocol (e.g.
https://) for the
vercel alias set hotdog-8jk8-coolcat.vercel.app sillyhotdog.im
vercel alias set hotdog-8jk8-coolcat.vercel.app https://sillyhotdog.im
With your custom domain aliased to the new target Deployment, you may now visit the original project's Domain settings. Under the domain tab, remove the domain. Under the new project's Domain settings, you may now add the domain, along with any redirects and Git branch assignments.
Alternatively, it is possible to move a custom domain between projects with the Vercel API. This method may be quicker to perform however a brief period of downtime is likely to occur between the execution of the removal and addition API calls.