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
| Surface | Anchor page | Who 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 |
| Location | A /near/... city + radius + category | Swirl 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:
- Accepts the request at your custom hostname.
- Serves the landing page’s HTML, leaving the URL bar on your domain.
- 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.
- Click Add a domain.
- Enter the hostname (e.g.
nc.danceorevents.kingsroadballroom.com). - 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. - 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.
- Add the records at your provider. Wait a minute. Click Verify.
- 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:
| Badge | Meaning |
|---|---|
| Awaiting DNS | We haven’t seen the TXT record yet. Add the records and click Verify. |
| Verify failed | The 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). |
| Live | Cert 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.