Skip to main content
By default, your client portal is available at <your-atrium-domain>/portal. You can serve it at any domain or subdomain you control — for example, portal.agency.com — by placing a reverse proxy in front of Atrium.
Custom domain management is not a built-in Atrium UI setting. This is infrastructure-level configuration that you handle at your server or DNS layer. Native custom domain support is planned for a future release.

How it works

A reverse proxy sits in front of your Atrium instance and forwards requests from your custom domain to Atrium’s container port. From your client’s perspective, they visit portal.agency.com and see a fully branded Atrium portal.
You can use any reverse proxy that supports this pattern: Caddy, nginx, or Traefik are common choices.

Prerequisites

  • A domain or subdomain you control (e.g. portal.agency.com)
  • An A or CNAME DNS record pointing that subdomain to your server’s IP address
  • Atrium running and accessible on your server (default port 8080)

Example: Caddy

Caddy automatically provisions TLS certificates via Let’s Encrypt, which makes it the simplest option. Create or edit your Caddyfile:
Reload Caddy:
Caddy handles HTTPS automatically. Your clients can now reach the portal at https://portal.agency.com/portal.
If you want portal.agency.com (no path) to go directly to the portal, add a redirect rule:

Example: nginx

DNS setup

Point your subdomain at your server before configuring the proxy. For most DNS providers, add an A record: DNS changes can take a few minutes to several hours to propagate.
Stripe webhooks and OAuth callbacks use your API_URL, not the portal domain. Make sure API_URL in your .env points to your Atrium API’s public HTTPS address. See the Payments docs for details.