Every workspace gets a family of system subdomains under bettersuite.io automatically. On Professional and Enterprise plans you can layer your own domains on top of them. This article walks through what's mapped, the one DNS record you add, and what happens between adding a domain and it going live.
What gets provisioned by default
When your workspace is created, BetterSuite generates one system subdomain per app from your slug plus a per-app suffix:
| App (enum value) | System URL pattern (slug = acme) |
|---|---|
TAXI_PASSENGER | acme-rides.bettersuite.io |
TAXI_DRIVER | acme-drive.bettersuite.io |
SHOP_CUSTOMER | acme-shop.bettersuite.io |
SHOP_VENDOR | acme-vendor.bettersuite.io |
PARKING_APP | acme-parking.bettersuite.io |
SERVICE_CUSTOMER | acme-service.bettersuite.io |
SERVICE_PROVIDER | acme-provider.bettersuite.io |
ADMIN_CONSOLE | acme-admin.bettersuite.io |
Only the apps for verticals you enabled get provisioned, plus ADMIN_CONSOLE always. ADMIN_CONSOLE is your console address: this same dashboard, under your own name and logo and limited to your workspace. System subdomains are pre-verified and can't be removed from the dashboard — they're the fallback if a custom domain regresses.
What a custom domain replaces
A custom domain is added per app. The page is at Owner Dashboard → Custom Domains and is owner-only — non-owner admins can't add or remove domains even if they have other manage-* permissions. The page also gates the Add custom domain button behind a Professional or Enterprise plan; below that you'll see an upgrade banner.
Each app card shows the system subdomain on top and either a custom-domain block underneath or an "Add custom domain" button.
How a custom domain goes live
You add one DNS record. BetterSuite does the rest: it validates the domain, issues its HTTPS certificate, renews it, and routes the domain to the right app. There is no server of your own to run in front of it.
Every custom domain, for every app, points at the same target:
| Type | Name | Value |
|---|---|---|
| CNAME | rides (or whatever subdomain you want) | domains.bettersuite.io |
The dashboard shows this target on the app card, with a copy button, both before you add the domain and while it is pending.
Once the record is visible, the domain is validated over HTTP and its certificate is issued — usually within a few minutes. Until then the domain shows as Pending, with the reason underneath (for example, that the DNS record hasn't been seen yet, or that the certificate is being issued).
Passkeys, iOS Universal Links and Android App Links work on the custom domain without any extra setup: the /.well-known/ files they rely on are served for it automatically.
Workflow end to end
- Open
Owner Dashboard → Custom Domainsand click Add custom domain on the app card. - Enter the hostname (e.g.
rides.acme.com) and add it. It appears as Pending. You can do this before the DNS record exists. - Add the CNAME at your DNS provider, pointing to
domains.bettersuite.io. - Click the refresh icon next to the Pending badge after a few minutes. It flips to Verified once the certificate is live; until then it tells you what it is still waiting on.
Removing a custom domain
The trash icon next to a custom domain triggers a step-up password prompt before deletion — removing a domain in production redirects live traffic, and a hijacked session shouldn't be able to do that without re-entering the password. System domains can't be deleted; they're managed automatically.
Removed domains are written to the audit log (/dashboard/audit-log) as custom_domain_removed, with the domain string in the payload, so you can answer "who took rides.acme.com offline?" later.
Common issues
Pendingsays the domain "does not CNAME to this zone" — the record is missing, points somewhere else, or hasn't propagated. Check it withdig CNAME rides.acme.com; it must answerdomains.bettersuite.io.- CAA records blocking issuance — if your domain publishes a restrictive CAA record, the certificate can't be issued and the pending reason says so. Allow issuance for the subdomain you're pointing at us.
- Your DNS is on Cloudflare — set the record to DNS only (grey cloud). A proxied record in your own Cloudflare account hides the CNAME from validation.
- System-suffix collision — you can't register a custom domain ending in
.bettersuite.io; the mutation rejects it explicitly.
What's next
- Branding — pair your custom hostname with your own logos and theme.
- Team & Roles — control which admins can manage domains.
- Plans & Billing — custom domains require Professional or Enterprise.