← Back to blog

How to add custom domains for your users in an AI-built SaaS (Lovable, Base44, Bolt, v0)

Jonathan Geiger·
lovablebase44boltv0ai builderscustom domainswhite label saasno code

You shipped a SaaS in Lovable, Base44, Bolt, v0, or Replit. It works. Your first paying customers are using it. Then one of them sends a message:

"Can I use my own domain for this? Something like portal.mybrand.com instead of yourapp.com/customer/123?"

You look around in your AI builder's dashboard. Nothing about custom domains for your USERS. There's a setting for "host your app on your own domain" (the single one your SaaS lives on), but no path to "let each customer bring their own."

That's because multi-tenant custom domain support isn't something Lovable, Base44, Bolt, or v0 ships by default. It's a separate problem: TLS certs per hostname, edge routing, DNS monitoring, renewals every 60 days, forever. They built the AI app builder. The custom-domains layer is its own piece of infrastructure.

This post: how to bolt that layer onto an AI-built SaaS in under an hour, regardless of which builder you used.

The gap, in one paragraph

Lovable, Base44, Bolt, v0, and Replit host YOUR SaaS on YOUR domain. Your app lives at yourapp.com. The moment a customer says "I want my instance at portal.acmeco.com," you have to provision TLS for that hostname, route requests to your origin, monitor DNS, renew certs forever. None of that lives in the AI builder. You need a Custom Domains API.

What you can build with it

A handful of patterns where multi-tenant custom domains matter:

The full list of 20+ use cases is at /use-cases. Pick the one closest to what you're building — each page covers the integration in your domain's language.

How it works in your AI-built app

Whatever AI builder you used, the integration shape is the same:

  1. From your app's backend (Lovable export, Base44 functions, Bolt deploy, Replit handler, v0 + Next.js), make one API call to Domainee when a customer wants to connect a domain.
  2. Domainee returns a CNAME the customer should add at their registrar.
  3. When DNS lands, Domainee issues a TLS cert via Let's Encrypt and fires a webhook to your backend.
  4. You mark the domain "live" in your DB, and that customer's instance starts serving from their URL.

Every AI builder gives you somewhere to put server-side code:

  • Lovable exports a Vite or Next.js project. You host it on Vercel, you call Domainee from there.
  • Base44 has built-in backend functions you can write in.
  • Bolt deploys to a Node.js runtime with your own server code.
  • v0 components plug into your own Next.js project where you have full backend control.
  • Replit gives you a hosted Node/Python/etc backend out of the box.

From any of those, calling api.domainee.dev is a fetch call.

The integration in 10 lines

When a customer enters their domain in your SaaS dashboard:

const res = await fetch("https://api.domainee.dev/v1/domains", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.DOMAINEE_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    hostname: "portal.acmeco.com",
    originUrl: "https://your-ai-built-app.com",  // your AI builder's hosted URL
    metadata: { customerId: "cust_123" },         // echoed back in webhooks
  }),
});

const { domain } = await res.json();
// domain.dnsRecords contains the CNAME the customer must add at their registrar.

Then receive the webhook when the cert issues:

// POST /webhooks/domainee in your backend
const event = await req.json();

if (event.type === "domain.verified") {
  // event.data.metadata.customerId tells you whose domain went live.
  // Mark their instance "live" in your DB; email them; done.
}

That's the entire feature. TLS, DNS monitoring, the cert renewal job that runs at 3am every 60 days — none of that is your problem.

Skip the DNS-paste friction with Domain Connect

If you want customers to avoid manually pasting a CNAME, Domainee supports the Domain Connect protocol (Cloudflare, GoDaddy, Network Solutions, IONOS). The customer clicks "Connect my domain," approves at their DNS host, records get added automatically. Same one API call on your side.

About 40% of consumer domains live at hosts that support Domain Connect, so for an AI-built SaaS aimed at non-technical users, this is worth wiring in.

Pricing for AI-built SaaS

50 customer domains free, forever. Then $0.20/domain/month, graduated down to $0.10 at 10,000+ customers. 100 GB of bandwidth included on the free tier, 400 GB on paid, $0.05/GB after.

No card to start. Most teams launching a SaaS on Lovable, Base44, Bolt, v0, or Replit run their entire pilot, beta, and early-paid phase on the free tier before paying anything.

Try it

Sign up free. Mint a key at /developers. Drop the 10-line integration into your AI builder's backend. Your first customer can connect their domain today.

If you want to drive Domainee from inside Cursor or Claude Code while you're still building, the Domainee MCP server lets your AI agent register, check, and debug domains in plain English.

The full list of /use-cases is worth a scroll — odds are someone has already built exactly the pattern you're building on Lovable or Base44, and the page tells you how the integration works for that specific shape.