Skip to content

Custom domains

A custom domain makes a single page on Swirl reachable at a hostname you own — say nc.dance landing on the dance-events-near-Nevada-City page, or kingsroadballroom.com landing on your venue page. Your domain stays in the browser address bar on that landing page; if a visitor clicks through to something else, they land back on swirl.events.

It’s vanity hosting, not a separate site: same data, same backend, same updates — just a friendlier front door.

What you can attach a domain to

SurfaceAnchor pageWho can attach it
Event/events/<slug>/Event owners / managers
Venue/venues/<slug>/Venue owners / managers (see Claiming a venue)
Host/hosts/<slug>/The host themselves
Series/series/<slug>/Series owner
LocationA /near/... city + radius + categorySwirl admins only

You can attach more than one hostname to the same surface — typically example.com and www.example.com so both work.

How it works (the short version)

We run a small reverse proxy that:

  1. Accepts the request at your custom hostname.
  2. Serves the landing page’s HTML, leaving the URL bar on your domain.
  3. Redirects every other path through to the matching page on swirl.events.

The TLS certificate for your domain is obtained automatically from Let’s Encrypt the first time someone visits — no cert ceremony, no waiting.

Adding a domain

From the host workspace, open the surface you want (an event in the editor, a venue at /manage/venues/[id]/, etc.) and find the Custom domain section.

  1. Click Add a domain.
  2. Enter the hostname (e.g. nc.dance or events.kingsroadballroom.com).
  3. The panel expands with two DNS records to add — an A record pointing your hostname at our proxy IP, and a TXT record at _swirl-verify.<your-host> that proves you control the domain.
  4. We auto-detect your DNS provider from its name servers and show step-by-step instructions for that provider (Cloudflare, Namecheap, Porkbun, GoDaddy, Squarespace, Route 53, DNSimple, Hover, and more). If we get it wrong, pick from the dropdown.
  5. Add the records at your provider. Wait a minute. Click Verify.
  6. Once verification succeeds, the domain goes live within ~30 seconds. The TLS cert is issued automatically on the first HTTPS request.

Status badges

Each domain shows where it is in the lifecycle:

BadgeMeaning
Awaiting DNSWe haven’t seen the TXT record yet. Add the records and click Verify.
Verify failedThe lookup ran but didn’t find the right TXT value. Common: typo, propagation delay.
Live (cert pending)Verified, in the live list. The first HTTPS request will trigger cert issuance (~10s).
LiveCert issued and serving.

After verifying, you don’t have to do anything else. We re-check periodically for ~24 hours, so if your DNS propagates late, the badge flips on its own.

Removing a domain

Click Remove on the row. Future visitors to that hostname will see a TLS / connection error until you remove the DNS records or repoint them elsewhere.

Limits

There’s a soft cap of 10 custom domains per registered domain per week, per user — well below what your DNS provider or our cert provider would consider abusive. Most people will never come close. If you hit it, wait a week or email events@swirl.events with the reason.

The cap exists because of Let’s Encrypt’s own rate limits — 50 certificates per registered domain per week. We stay well under so a single user can’t burn through the project-wide budget.

What if my DNS provider isn’t in your list?

Pick Other / not sure. The walkthrough still tells you exactly what to add — a generic A record and a generic TXT record. Every DNS provider supports those.

Troubleshooting

  • Verify failed, but I added the TXT record. DNS often takes a minute or two to propagate. Try again. If it still fails, double-check the record name (_swirl-verify.<your-host>) and value (swirl-verify=...) match exactly — including the prefix.
  • The page loads but the URL bar flipped to swirl.events on first click. That’s by design — only the landing page lives under your domain.
  • TLS error in the browser. Either DNS hasn’t propagated yet, or the A record isn’t pointing at our proxy. Confirm the A record with dig +short <your-host>.
  • Two domains, one page. Add them as two separate domains in the panel (one for the apex, one for www.). They’ll both verify and serve independently.