Onekode
Start free
Ways to start
Work
Founders Hub
AboutContact
← All guides
Guide·Domain and email

Get your custom domain and email working

On every builder we checked, the same few records break a connection. Find yours, then fix your email.

The builders' own pages list five reasons a custom domain won't connect: a record is missing, an old record is in the way, www was not added, a proxy sits in front, or a CAA record (it limits who may issue your certificate) blocks it. Check them in that order. Builder pages read 24 October 2026.

Not working

Why is my custom domain not working on Replit or Lovable?

The records aren't all in yet, or an old record is in the way. Work down this list. Each line names its builder. Pages read 24 October 2026.

  1. Is the app published? Replit says a custom domain "doesn't serve your app until the app is published." On Lovable, the status Ready means the project is unpublished. Publish it.

  2. Are the records in, copied exactly? Replit asks for an A record (it points your domain at Replit) and a TXT record (it proves the domain is yours). Lovable asks for an A record and a TXT record named _lovable, with a value that starts lovable_verify=. Copy the values your builder shows. This page doesn't print them, because they can change. Both builders offer Entri, which signs in to your DNS provider and writes the records for you, or shows them if it can't.

  3. Is www added? Replit doesn't set up www when you link the root domain. Add it as its own entry, with its own TXT record. Lovable connects www alongside the root and lists it separately.

  4. Are old records gone? Replit: remove AAAA records (the IPv6 kind of A record) and keep one A record at the root. Lovable: old records can show the old site (section 4).

  5. Is a proxy in front? A proxy, such as Cloudflare, sits between visitors and your host. Replit wants the A record set to DNS only (Cloudflare's grey cloud). So does Lovable's standard set-up. Its advanced option, "Uses Cloudflare or similar proxy", uses a CNAME to your project's lovable.app address instead, and needs no TXT record.

  6. What does the status say? Replit checks every 1 to 2 minutes for about 6 hours, then stops and shows Failed: its DNS checks stopped, because the records weren't in place in time. Remove the domain and add it again. Lovable's statuses are below.

Status · What it means · What to do
StatusWhat it meansWhat to do
VerifyingWaiting for DNS records to propagate (spread across the internet)Click Check status. Check the A record and the full TXT value
Unable to verifyDNS verification did not finish within one hourClick Check status, and recheck the A record and the full TXT value
Setting upVerification is complete and the certificate is being issued. Until it is ready, the browser shows a security warning instead of your siteWait for Live
StalledThe certificate is taking longer than expectedClick Retry. You don't need to remove and re-add the domain
FailedOwnership was verified, but the certificate could not be issuedClick Retry
ReadyThe domain is set up, but the project was unpublished. When you publish again it becomes LiveClick Publish the project
Action requiredThe custom domain setup was not completed. With the www redirect on, root and www both show it until you click Complete setup on eachClick Complete setup
RemovedThe domain was added to another project, or DNS verification never completedClick Reconnect
OfflineThe domain was Live, but its DNS records are no longer valid, so it no longer points to your projectClick Recover, then review the records shown and update them at your DNS provider
Check failedLovable could not complete its check. Lovable says: "Do not change your DNS records based on this status alone"Click Check status
Connection issueThe domain is still connected, but Lovable may no longer be able to serve your project on it. Another service or project may be serving itFollow the instructions in the warning
Suspended(domains bought through Lovable)The registrar suspended it, most often because the registrant email wasn't verified before the deadlineVerify the registrant email and click the link
Action required(domains bought through Lovable)The registrant email you entered at purchase still isn't verified. ICANN requires it. The domain is still servingOpen the verification email and click the link

Stalled and Failed both have Retry. Unable to verify does not: it leads to Check status.

Two different Failed states. Replit's Failed: its checks stopped, so remove the domain and add it again. Lovable's Failed: the certificate could not be issued, so click Retry.

Lovable also shows Checking briefly while it confirms it can still serve your project (no action), Unpublished on your lovable.app address (publish the project), and Not connected on a www entry when the redirect is off (click Connect).

  1. How long to wait. Replit: between a few minutes and 48 hours. Lovable: up to 72 hours, "although most updates are applied within a few hours."

  2. No need to learn DNS. Each step names the record and says what it does. For where to click, read Replit's Custom domains and Custom domains and DNS, and Lovable's Set up a custom domain.

Not secure

Why does my domain say "not secure"?

The certificate isn't issued yet, and it usually waits on the records. A certificate (the SSL certificate) is what puts https and the padlock on your address. Replit, Lovable, Base44 and Bubble issue it automatically once the records are right.

Three things block it: a proxy where the builder expects DNS only, AAAA records, and a CAA record that doesn't allow your builder's certificate issuer. A CAA record is a record that lists which companies may issue certificates for your domain. Per builder:

  • Replit: at least one CAA record must allow Let's Encrypt. Both the A record and the TXT record are required, and the certificate can only be issued after the A record points to Replit. Renewal uses the TXT record, so keep it for the life of the domain.
  • Lovable: the CAA record must allow at least one of Google Trust Services (pki.goog), Let's Encrypt (letsencrypt.org) or SSL.com (ssl.com). Lovable recommends allowing all three. A warning right after verifying is usually Setting up. Wait for Live. If it shows Stalled or Failed, fix any CAA record, then click Retry.
  • Base44: remove or update any CAA record that blocks its issuers.
  • Bubble: if the browser says "This Connection is Not Secure", check for a CAA record on the root.

Then the vendors' own waits. Bubble says HTTPS can take 24 to 36 hours. Lovable says to contact support if there is no certificate after 72 hours. Read 24 October 2026.

By builder

How do I connect a custom domain to Lovable, Bolt, Base44, Bubble, FlutterFlow or v0?

The steps have the same shape everywhere: add the domain in the builder, add the records it shows at your registrar, wait. What differs is the plan, the records and the wait. Labels are the builders' own words from their docs. Read 24 October 2026.

Builder · Plan for a custom domain · What you add · Longest wait it states
BuilderPlan for a custom domainWhat you addLongest wait it states
ReplitThe page doesn't say. Check your planA and TXT, or Entri48 hours (checks stop after about 6 hours)
LovablePaid plansA and TXT, or Entri, or a CNAME in proxy mode72 hours
BoltPaid plansALIAS (or ANAME) at the root and a www CNAME, both to site-dns.bolt.host24 hours
Base44Starter plan and upANAME or ALIAS at the root (an A record if your provider has neither) and a www CNAME to base44.onrender.com; or "Let Base44 set up your DNS"48 hours
BubblePaid plansRoot and www records pointing to app.bubble.io; one CNAME for a subdomain24 hours for DNS, 24 to 36 for HTTPS
FlutterFlowPaid plans, one custom domain includedThe records shown in its UI; no other A records left; then Connect and Publish againThe page doesn't say
v0The page doesn't sayDNS set up with your registrar, through the Vercel consoleThe page doesn't say
  • Bolt: Bolt's Domain issues page says to check its status page first. If you see "another project is already using this domain", remove the domain from the previous host.
  • Base44: the guided set-up opens by default. You sign in to your DNS provider and approve the changes yourself. Enter the root domain and Base44 connects www with it. For a subdomain it sets up only the subdomain you entered, not its www.
  • Bubble: error 1014 most often means Cloudflare's orange-cloud proxy is on. For 1001, check your records, wait two hours and check again. For 525, wait an hour.

Moving the domain to a new host? See Move a Lovable app to Vercel.

Old site

Why does my domain still show my old site?

An old A, AAAA or CNAME record from your last host is still in your DNS. Remove it, keep your builder's records, then wait. Lovable, Base44, Vercel and FlutterFlow all say so. Lovable says your DNS provider probably still has records left over from your previous website or hosting provider. Base44 says to remove parking or default A and AAAA records. Vercel says to check for conflicting A, AAAA or CNAME records. FlutterFlow says no other A records should remain. Replit says to keep only one A record at the root.

If you see Cloudflare error 1001 or 1003 on a Lovable domain, set the Lovable records to DNS only. Then wait as long as your builder says (section 1). Read 24 October 2026.

Sending email

How do I send email from my app on my own domain?

You have two routes: your builder's own email, or an email service such as Resend. Both need a domain you have verified. Read 24 October 2026.

  • Lovable Emails (paid plans): sends sign-in emails and your app's own emails from your email domain. Sign-in emails need the built-in backend. It adds NS records (they hand one subdomain's records to Lovable) for a sender subdomain, notify by default. Lovable says: "Do not replace your domain's nameservers at your registrar." Lovable sets up SPF, DKIM and DMARC itself. It sends transactional emails only, not newsletters. Allow up to 72 hours.
  • Base44's built-in email (Starter plan and up): three CNAME records, no SPF or DKIM TXT record, DMARC optional. Base44 says it does not add DMARC automatically. One custom email domain per app, and it is for sending only. Allow up to 48 hours for the status to read Active.
  • Replit: the CNAME records Replit asks for are only for sending email. They don't block verification, SSL or sign-in.
  • A service such as Resend: add and verify a domain. The DKIM and SPF records must match exactly. Resend says it is often verified within 15 minutes, and can take up to 72 hours. It recommends sending from a subdomain, and says not to proxy its CNAME records.
Emails not sending

Why aren't my app's emails sending from my domain?

The sending domain isn't verified yet. Check its status where you set it up.

  • Lovable sends only from verified domains. If it is stuck on Pending, recheck the records, wait, press Verify domain, then delete the domain and add it again.
  • Base44 needs the status to read Active.
  • Resend: wait, then use Restart verification. It can take up to 72 hours.

Don't put a proxy in front of the email CNAME records (Resend says so). If the problem is the sign-up or reset link itself, see How do I set up login and user roles? Read 24 October 2026.

A mailbox

How do I get an email address on my domain without breaking anything?

You need a mail provider and its MX records. The one thing that breaks existing email is changing your nameservers before you copy the mail records. MX records tell the internet where your email is delivered. Nameservers are the servers that hold all your DNS records.

Base44 names Google Workspace and Microsoft 365 as providers to set up with MX records. On Replit (domains bought through Replit), Bolt, and Lovable (when you use Lovable's nameservers), you can add your own MX records in the builder's DNS settings. Use your email provider's records, as it shows them.

Never change nameservers without copying the email records first. Lovable says that with custom nameservers, any connected project and its email stay offline until you recreate those records there. Vercel says: "copy your existing DNS records to Vercel, including MX records for email and any verification TXT records." It lists "Email stopped arriving after a nameserver change" as a known problem. Base44 says: "Leave your MX and TXT records as they are" when you remove old records for the app.

  1. App records → your builder.

  2. Mail records (MX) → your mailbox provider.

  3. Sending records → your email service.

Change the nameservers and all three are gone unless you copy them first. Read 24 October 2026.

Ownership

Who owns a domain I bought through my builder, and what if I cancel?

Four builders' pages say nothing about ownership. Lovable says the most; Replit and Base44 say a little. Here is what each page states, and nothing more. Read 24 October 2026.

  • Replit: the domain renews automatically. WHOIS privacy (it hides your name and address from public domain records) costs nothing extra. ICANN rules require a 60-day wait after purchase before a transfer to another registrar, and the transfer goes through Replit Support.
  • Lovable: it registers the domain on your behalf. Domains bought through Lovable belong to your workspace, not a single project. New domains have a 60-day lock, which ICANN requires. After that, use Transfer out from the domain's menu, with an authorisation (EPP) code. Auto-renew is on by default.
  • If you cancel or downgrade: "Downgrading or canceling does not disconnect your domains or unpublish your project." Connected domains keep serving your published app.
  • The other half: after a downgrade to Free, you can't buy domains or connect domains to projects, including ones already in your workspace, until you upgrade again.
  • The bill: domains bought through Lovable are billed separately from your subscription and keep renewing. Lovable says auto-renew "keeps renewing and charging as usual."
  • Base44: domains bought from 9 September 2026 come from Wix, unless your plan is billed through the Apple App Store. Older ones may be with GoDaddy, or with IONOS if bought before 14 August 2026.
  • Bolt, Bubble, FlutterFlow and v0: their pages say nothing about ownership or cancelling.

Keep the domain login in your own name, not your builder's or a freelancer's. That is our advice. For owning the rest of your app (code, data, accounts), see Export your code.

The record check

What should I check once my domain is connected?

Go through these 11 checks in order and tick each one. Start with the first one you can't tick. Nothing is asked of you and nothing is sent anywhere. The ticks live on this page and reset when you reload it. Builder facts read 24 October 2026.

Your domain record check
DoneCheckWhat to look for
1. The app is publishedReplit: a custom domain doesn't serve your app until it is published. Bolt: you can connect a domain only to a published site. Lovable: a Ready status means publish the project
2. The records your builder shows are in, copied exactlyReplit: A and TXT, no trailing dot, no extra subdomain, no stale record. Lovable: A, and a TXT named _lovable starting lovable_verify=. Bolt: ALIAS at the root to site-dns.bolt.host. Base44: ANAME or ALIAS to base44.onrender.com. Bubble: records pointing to app.bubble.io. FlutterFlow: the records shown in its UI
3. www is addedReplit: its own entry with its own TXT. Lovable: connected alongside the root and listed separately. Bolt and Base44: a www CNAME. Bubble: a www record
4. No old A or AAAA records are leftReplit: remove AAAA, keep one A at the root. Lovable and Base44: old records can show the old site or block the connection. Bolt: use ALIAS, not AAAA. FlutterFlow: no other A records. Vercel: check for conflicting A, AAAA or CNAME records
5. The proxy is set the way your builder expectsReplit, Base44, Bubble: DNS only (Cloudflare's grey cloud, not proxied). Lovable: DNS only on the standard set-up, or its "Uses Cloudflare or similar proxy" option (a CNAME, no TXT)
6. CAA records allow your builder's certificate issuerReplit: allow Let's Encrypt. Lovable: Google Trust Services, Let's Encrypt or SSL.com (it recommends all three). Base44: remove or update any CAA record that blocks its issuers. Bubble: check for a CAA record on the root. If you have no CAA record, there is nothing to change
7. You waited as long as your builder saysReplit up to 48 hours (it stops checking after about 6 hours). Lovable up to 72. Bolt up to 24. Base44 up to 48. Bubble 24 for DNS and 24 to 36 for HTTPS
8. The browser shows no certificate warningLovable: Setting up shows a warning until the certificate is ready, so wait for Live. Lovable's Stalled or Failed: click Retry. Replit: both A and TXT must be in. Replit's Failed after about 6 hours: remove the domain and add it again
9. Your sending domain is verifiedLovable: only verified domains can send. Base44: the status reads Active. Resend: verified, and use Restart verification if it is still pending after 72 hours. Skip this row if your app sends no email
10. Your mail records (MX) are kept if you changed DNSNever change nameservers before copying them (Lovable, Vercel). Base44: leave your MX and TXT records as they are
11. The domain login is in your own nameIf you bought through your builder: Lovable keeps a bought domain in your workspace, where the owner can transfer it out. Replit transfers out through Replit Support. Keep the login in your own name (our advice)

You've ticked 0 of 11. Start with the first one you can't tick.

For the rest of launch, use the Launch List. After you connect, verify the domain in Search Console: see Lovable SEO.

Next step

What should I do next?

Domain connected, but not sure what else stands between you and a launch? Get a Free Build Audit. You send the link to your running app, and we look at what you built and tell you what stays, what needs fixing and what blocks launch. You get a recorded walkthrough of 10 to 15 minutes and a one-page note, with a first fix for each item. It is free. It is not a DNS service, and it doesn't promise a fix, a timing, or that your domain will connect.

Questions

Questions.

How long does a custom domain take to connect?

It depends on the builder, and each states its own longest wait. Replit says between a few minutes and 48 hours. Lovable says up to 72 hours, most within a few hours. Bolt says 24, Base44 48. Bubble says 24 hours for DNS and 24 to 36 for HTTPS. Read 24 October 2026.

Why is my domain stuck on verifying?

On Replit, it checks for about 6 hours, then shows Failed. Remove the domain and add it again. On Lovable, Unable to verify means DNS didn't verify within one hour. Click Check status and recheck the A record and the full TXT value. Lovable allows up to 72 hours. Read 24 October 2026.

Do I need a paid plan for a custom domain on Lovable?

Yes. Lovable's custom domains are on paid plans, and the free lovable.app address stays. Bolt, Bubble and FlutterFlow also say paid plans, and Base44 says Starter and up. The Replit and v0 pages we read don't say. Read 24 October 2026.

Can I keep Cloudflare in front of my app?

It depends on the builder. Replit, Bubble and Base44 want DNS only, which means not proxied. Lovable wants DNS only on its standard set-up. Its advanced "Uses Cloudflare or similar proxy" option uses a CNAME and needs no TXT record. Read 24 October 2026.

Will connecting my domain break my email?

It can, if you change nameservers or delete MX records without copying them first. Lovable and Vercel both warn about this. Copy your mail records before you change anything, and leave your MX and TXT records as they are. The detail is in How do I get an email address on my domain without breaking anything? Read 24 October 2026.

Does Base44 send email from my domain?

Yes, on the Starter plan and up. It is for sending only, with three CNAME records and up to 48 hours to reach Active, and one custom email domain per app. To receive email, buy a business email through Base44 or set MX records with your own email provider. Read 24 October 2026.