All guides
Tutorial/ 5 min read/

Set Up a Custom Domain on Launchverse with Free HTTPS

Connect any domain — .com, .ng, .io, .africa — to your Launchverse project. Walks through DNS records, automatic Let's Encrypt HTTPS, and the apex-domain trap.

Every project on Launchverse gets a free .hosted.launchverse.app URL automatically. That's fine for staging or internal tools, but real products need real domains. Here's how to wire one up — including the apex-domain edge case that bites people every time.

What you need

  • A domain registered somewhere — Namecheap, Google Domains, Truehost, Whogohost, anywhere.
  • A Launchverse project that's already deployed and serving traffic on its .hosted.launchverse.app URL.

1. Find your engine's IP

In the project's Domains tab, click "Add Domain" and you'll see a banner with the IP address you need to point your DNS records at. Copy it.

2. Add the DNS records

This is where most people get stuck because of the difference between subdomains (app.example.com) and apex domains (example.com with no subdomain).

Go to your registrar's DNS panel and add a single record:

TypeNameValue
Aapp<engine IP>

That's it. DNS propagates in 1–60 minutes; once it does, traffic to app.example.com reaches your project.

Apex domain

You cannot put a CNAME record on an apex domain (DNS spec doesn't allow it). Most registrars implement one of two workarounds:

  • ANAME / ALIAS / CNAME flattening (Cloudflare, Namecheap Easy DNS, Hover) — pretend it's a CNAME to the engine. Use the engine's hostname engine.launchverse.app.
  • A record only — point an A record directly at the engine's IP.

Always set up both example.com and www.example.com so people who type either work. The Domains tab on Launchverse will then redirect one to the other based on what you set as canonical.

3. Add the domain in Launchverse

Back in the Domains tab, type the full domain (including https://), click Add, and the engine starts the verification. Behind the scenes:

  • A DNS lookup confirms the record points at the engine.
  • Traefik issues a Let's Encrypt certificate via HTTP-01 challenge.
  • The certificate is installed and the proxy starts routing.

This usually takes ~30 seconds. If it fails, the most common reasons are:

  • DNS hasn't propagated yet — wait 5 minutes and retry.
  • The A record points at the wrong IP — verify with dig +short example.com.
  • An ANAME / CNAME flattener is hiding the real IP — disable proxying ("orange cloud" off in Cloudflare) for the verification, then re-enable.

4. Force HTTPS

Once the certificate issues, head to the project's Security tab and toggle "Enforce HTTPS." From this point HTTP requests get a 308 redirect to HTTPS automatically.

5. Multiple domains

You can attach as many domains as you need to a single project — each gets its own certificate, all served from the same application. Useful for .com + .ng + .app parallel branding, or for routing staging.example.com to a preview deploy.

Renewals

Let's Encrypt certificates expire every 90 days. The engine renews them automatically 30 days before expiry; you don't need to do anything. If a renewal fails (rare — usually because DNS changed), the engine raises an alert and continues serving the old cert until it expires.

Cloudflare-specific tips

If you proxy through Cloudflare ("orange cloud"), set the SSL/TLS encryption mode to Full (strict). Anything less either breaks HTTPS or creates a redirect loop.

Further reading


Ready to deploy?

Start free in Naira — no card required, no FX surprises.

Have feedback or a topic to suggest? Talk to us.