Skip to content

Add custom domains

import { Aside, Steps } from ‘@astrojs/starlight/components’;

Every fresh Website ships on a Vercel preview URL like client-your-slug.vercel.app. To put it on a custom domain:

  • A Melbora Website with status: "active"
  • A domain registered somewhere (Cloudflare, Namecheap, GoDaddy, Route 53, etc.)
  • Access to that domain’s DNS settings
  1. Add the domain to the Website.

    Terminal window
    vantage domains add <websiteId> --domain yourdomain.com --kind site

    The response includes the DNS records Vercel needs. Example output:

    ✓ Added domain yourdomain.com (pending).
    Set these DNS records at your registrar:
    TYPE NAME VALUE
    A @ 76.76.21.21
    CNAME www cname.vercel-dns.com
  2. Copy those records into your registrar’s DNS console.

    Exact UI varies (Cloudflare = “DNS” tab; GoDaddy = “DNS Management”; etc.). Add each row as printed. TTL of 300 (5 min) is fine.

  3. Wait for DNS propagation.

    Usually 1-5 minutes; can take longer on slow registrars. Check with dig:

    Terminal window
    dig +short yourdomain.com
    # Should return 76.76.21.21
  4. Melbora auto-verifies in the background.

    Terminal window
    vantage domains list <websiteId>

    status flips from pendingverified when Vercel sees the right records. Usually within a minute of DNS resolving.

  5. Visit your domain.

    https://yourdomain.com should now serve your site. SSL certificate is provisioned automatically by Vercel (Let’s Encrypt) — that adds another minute on first hit.

Best practice is to serve from the apex (yourdomain.com) and redirect www.yourdomain.com → apex. The A + CNAME records above set this up automatically:

  • Apex (@) resolves to Vercel’s IP and serves the site
  • www resolves via CNAME to Vercel and 308-redirects to apex

To go the other way (serve from www., redirect apex → www.), add the www. domain as the canonical and apex as an alias in the Vercel project. The CLI doesn’t currently expose this — do it in the Vercel UI for now.

If you want Vercel to handle DNS entirely:

  1. Add the domain as above
  2. Go to your registrar and change the nameservers to Vercel’s: ns1.vercel-dns.com + ns2.vercel-dns.com
  3. Wait for the nameserver change to propagate (can take 24-48 hours)

Melbora sets vercelManaged: true on the domain row once it detects this. Tradeoff: every DNS change for that domain now goes through Vercel’s UI, not your old registrar.

Email domains go through the Resend integration:

Terminal window
vantage domains add <websiteId> --domain mail.yourdomain.com --kind email

You’ll get DKIM/SPF/DMARC records to set. Resend verifies them asynchronously. Status flips to verified once Resend confirms.

Terminal window
vantage domains remove <websiteId> yourdomain.com

This:

  1. Removes the domain from the Vercel project
  2. Deletes the row from vantage-domains
  3. Does not alter your registrar’s DNS records — those stay until you remove them manually

After removal the apex DNS will still point at Vercel but Vercel will 404. Either delete the records at your registrar or repoint them elsewhere.

status: "failed" after waiting 10+ minutes. DNS records are wrong or not propagated. Re-check with dig and compare to what Melbora printed. Common gotchas:

  • A record value typo (76.76.21.2176.76.21.12)
  • CNAME for the apex (most registrars don’t allow this — use A/AAAA)
  • TTL too high; old records cached

Domain works on https:// but not https://www. (or vice versa). The second record wasn’t set. Re-run vantage domains list to see what was printed at add time, or check Vercel directly.

“This domain is already in use” error. A different Vercel project (possibly an old test) owns the domain. Remove from the other project first.