# Your own domain

Canonical: https://docs.gemmein.com/sites/domains
Markdown: https://docs.gemmein.com/sites/domains.md

Show your live site at your own address, like www.yourapp.com. You add the domain, prove it is yours, choose to show your Gemmein site there, and add the records where you manage its DNS. Gemmein checks them and sets up the secure connection (https) for you.

> **On every paid plan.** Up to 5 of your own domains per Live app, never a charge. Your own domain shows the live site once the app is live and a version is on it. The private preview stays at `<slug>-dev.gemmein.dev` and is never shown at your domain. A domain shows your Gemmein site only when you choose it, so a domain whose site is hosted somewhere else is left alone.

## Add it

1. **Add the domain.** On the dashboard, open **Domains** and choose **Add a domain**. Type it without www (`yourapp.com`). Or ask your AI: it asks you to approve adding it, in your browser, with the code Gemmein emails and your authenticator code if you set one up.
2. **Prove it is yours.** Where your domain's DNS is managed (usually the company you bought it from), add the ownership record the domain's page lists:
  | Type | Name | Value | What it does |
  | --- | --- | --- | --- |
  | TXT | `_gemmein` | The value on the domain's Records list | Proves the domain is yours |
3. **Choose to show your site there.** On the domain's page, choose **Show my Gemmein site here**. Or ask your AI, or run `npx gemmein domains show <domain>`. Gemmein then lists the one more record that shows your live site: Add it at your DNS provider. The page shows this record only once you have chosen to show your site.
  | Type | Name | Value | What it does |
  | --- | --- | --- | --- |
  | CNAME | `www` | `<slug>.gemmein.dev` | Shows your live site at www.yourapp.com |
4. **Forward the bare domain.** Most DNS providers can't put a CNAME on the bare domain (`yourapp.com`), so your site is shown at `www.yourapp.com`. To have `yourapp.com` open it too, turn on forwarding from `yourapp.com` to `https://www.yourapp.com` at the company you bought the domain from.
5. **Wait for "Live at".** Gemmein checks the records on its own and sets up the secure connection. The domain's page shows each step.

The domain's page gives you your DNS provider's own guide and the exact steps. Gemmein never holds a login or a key for your DNS. See [Is your domain working?](https://docs.gemmein.com/sites/domains.md#ai-domain-check)

## How long it takes

Once the records are in, the secure connection is usually ready within a few minutes, sometimes up to an hour. A DNS change reaches everyone once the old answer's cache time runs out; [the domain check](https://docs.gemmein.com/sites/domains.md#ai-domain-check) says how long that is for your domain. While a record is still waiting, the domain's page checks every minute; **Check again** looks at once.

## What the domain's page says

| It says | What it means |
| --- | --- |
| Add one record to prove it’s yours | The TXT record isn't found yet. Nothing is shown at the domain until it is. |
| Your Gemmein site isn’t shown here | The domain is proven yours, and you have not chosen to show your site here. Choose Show my Gemmein site here; the page then lists the one record to add. |
| Not showing your site yet | You chose to show your site here, and the app has no version live yet. It connects once a version is live. |
| Hosted elsewhere | The domain is proven and points at another service, so Gemmein leaves its records as they are. To show your Gemmein site there instead, choose Show my Gemmein site here. |
| Connecting your site | The domain is yours and the CNAME is being checked; the secure connection is being set up. |
| Live at https://www.yourapp.com | Your live site is shown there. |
| Needs attention | The CNAME no longer points at your site, or the domain already shows another app's site. One domain shows one app. The page says which, and the record to fix. |
| Your site is offline | Connected, and your live site is taken offline, so it shows “This site is offline” until you put it back online. |

## Show your site, or stop showing it

The switch is the same on every surface: **Show my Gemmein site here** and **Stop showing my site here** on the domain's page; `npx gemmein domains show <domain>` and `npx gemmein domains hide <domain>`; and your AI (`domain_site`, or `add_domain` with the site plan when it adds the domain). While the app is in Development it acts at once. On a Live app it is your approval in your browser, with the code Gemmein emails and your authenticator code if you set one up.

It is refused the same way everywhere for a domain that is not on this app (`not_found`), a domain not proven yours yet (`not_verified`), and a domain that only sends your app's email (`email_only`). Stopping is one press that shows what happens, then a second that does it: your site stops answering at that address, the domain stays verified, and sign-in and email keep working. You can show it again any time. Each use is on your Logs.

Leave it off for a domain whose site is hosted somewhere else, such as a subdomain on Vercel. A proven domain you have not chosen is left alone and reads Hosted elsewhere when it points at another service.

## What Gemmein checks

- **That the domain is yours.** The TXT record, before anything is shown there. Once proven, the domain stays yours while either the TXT record or the CNAME is there, so you can delete the TXT record after proving. Only when both are gone, on three checks in a row at least two hours apart, does the domain stop showing your site; Gemmein emails you, and the TXT record proves it again. Either record back before the third check resets the count. A check that can't reach DNS never counts.
- **That it points at your site.** The CNAME, about every 10 minutes while a domain is connecting and every few hours once it is live. Pointed elsewhere, it stops showing your site and reads Needs attention; pointed back, it comes back on its own.
- **That nobody else holds it.** A domain another app has already proven is refused, and the refusal is on your Logs.

## Is your domain working?

On the domain's page, **Check now** on its status card looks at what the internet sees. Ask your AI "is my domain set up right?" and it runs the same check (`domain_check`). Both answer in three parts:

- **What's there now:** the records at your domain, its www and `_gemmein`, as three public DNS services (Cloudflare, Google and Quad9) see them.
- **What Gemmein needs:** the ownership TXT record and, for your live site, the CNAME.
- **Where it stands:** proven or not, whether the live site is connecting, live, offline or needs attention, the secure connection, and the one record to change, in your DNS provider's own menu words. For example: "Change the CNAME record named www that says @ so it points to plantshop.gemmein.dev."

It also says how far a change has spread, such as "2 of 3 public DNS servers see the new record; the old one is cached for up to 40 minutes", so you know how long to wait. If public DNS can't be read at that moment, it says so; it never reports a record as missing when it couldn't look.

**Setting it up at your provider.** The domain's page and your AI (`domain_connect_link`) give you your DNS provider's own guide and the exact steps, in its own menu words. A one-click link, where you sign in at your provider, see every record and approve there, is offered only where Gemmein has switched one-click setup on; open it yourself, straight away. The bare domain and subdomains such as `shop.yourapp.com` are set up by hand. Gemmein never holds a login or a key for your DNS, and never changes your DNS itself.

Each check and each link is on your Logs. The limits:

| What | Limit | Past it |
| --- | --- | --- |
| A fresh look at public DNS | 1 per domain every 5 minutes | You get the last look, and when the next fresh one can run |
| Fresh looks per account | 30 an hour (10 while the app is only in Development) | The last look, if there is one, and when the allowance frees |
| One-click links per account | 20 an hour (10 while the app is only in Development) | Refused until the hour frees; the answer says when |

It only ever looks at a domain already added to this app. A domain that belongs to another app, or was never added, is refused and nothing is looked up.

## Where buyers land after paying

Once your domain shows the site, a buyer returns there after paying. Before that, they return to `<slug>.gemmein.dev`.

## Removing a domain

Choose **Remove** on the domain's page; it asks first. Or ask your AI, and approve it in your browser with the code Gemmein emails and your authenticator code if you set one up. The domain stops showing your site first, then its email (if it sends your app's email) goes with it. Nothing is deleted at your DNS provider; remove the records there when you're ready.

## What happens if…

| If… | What happens | What you do |
| --- | --- | --- |
| Your domain's site is hosted somewhere else | Gemmein leaves it alone and the page reads Hosted elsewhere, with no record to change | Nothing, or choose Show my Gemmein site here to move the site to Gemmein |
| You stop showing your site at a domain | Your site stops answering there; the domain stays verified, and sign-in and email keep working | Choose Show my Gemmein site here to show it again |
| You add the CNAME before the TXT is found | Nothing is shown at the domain yet | Add the TXT record; it connects once it's found |
| The app isn't live yet | The domain can be proven, and shows the site after your first version goes live | Go live, then put a version live |
| The CNAME later points elsewhere | It stops showing your site; Needs attention: it no longer points at your site | Point it back, or remove the domain |
| Another app already proved the domain | Refused; the first app keeps it | Use another domain, or remove it from that app first |
| You already have 5 domains on the app | The next one is refused | Remove one first |
| The TXT record is deleted | Nothing changes while the CNAME is there | Nothing to do |
| Both the TXT record and the CNAME are gone | After three checks in a row, at least two hours apart, the domain stops showing your site and Gemmein emails you | Add the TXT record back to prove it again; the site reconnects on its own |
| Your plan's payment fails and the app is paused | Your domain shows a paused page with the live address | Pay; it comes back |
| You take the live site offline | Your domain shows "This site is offline" | Put the site back online |
| You remove the domain | It stops showing your site first, then its email goes | Remove the records at your DNS provider |

The dashboard's guide to the page: [Domains](https://docs.gemmein.com/console/domains.md). Sending your app's email from the same domain: [Sending domain and senders](https://docs.gemmein.com/email/sending.md).

## Start

Your site comes first: [Your site](https://docs.gemmein.com/sites.md). New to Gemmein? [Connect your AI](https://docs.gemmein.com/connect.md), or [start building](https://gemmein.com/start).
