Finished on the night of 3 September. The registry now hands
tourdash.io to Cloudflare, Cloudflare serves the app on both spellings with its
own certificates, and Supabase sends people to the new address. The sections below are kept
as the record of what was blocking it and what changed, in the order it happened.
Everything on the list below was done between the first check and midnight, with the Namecheap save made by hand and the rest through the dashboards and the Cloudflare API.
Namecheap now lists gabriella.ns.cloudflare.com
and milan.ns.cloudflare.com, and the .io registry agrees. Google and Quad9
resolvers already return Cloudflare addresses for tourdash.io. Cloudflare's
own 1.1.1.1 still had the old parking answer cached at the last check, so some networks
will see the site up to an hour later than others.
The www record now points at
tour-dash.pages.dev instead of Namecheap's parking page. The mail,
autoconfig and autodiscover hosts are DNS only, so mail clients reach Private Email
directly. The DKIM key that the import skipped was added by hand. The bare domain's
record was already right.
www.tourdash.io was added and went Active
within a minute. The old tourdash.io entry, stuck in an error state from
being added before DNS moved, was removed and added again. Cloudflare's edge answers both
names with a certificate issued for each. A redirect rule on the zone then sends
www.tourdash.io to the same path on https://tourdash.io, and
plain http:// requests are forced to HTTPS, so there is one address.
Site URL is https://tourdash.io, and the
redirect allow list holds https://tourdash.io/** and
https://www.tourdash.io/**. Password reset and signup emails now land on
the new address.
Two things are done, one thing is blocking the rest, and the last three wait behind it.
The live build now carries tourdash.io as its
canonical address, the old development report links to it, and this reports site points
there in its header, footers and guides. Both sites went out again on 3 September. The
tour-dash.pages.dev address keeps working alongside it.
tourdash.io is attached to the
tour-dash Pages project. Its status is Pending, because Cloudflare
proves ownership by answering a request on the domain, and no request can reach it
yet. It will turn Active on its own once DNS moves.
Namecheap's Advanced DNS has a parking record
(A @ 162.255.119.221) and a CNAME @ tour-dash.pages.dev side by
side. Resolvers take the parking one, so the bare domain times out and there is no
www record at all. Cloudflare will only serve a bare domain from a Pages
project when the domain's DNS lives in Cloudflare, so the fix is the nameserver change
below. Adding more records in Namecheap will not get there.
Once the domain is active, www.tourdash.io
gets added to the project, Supabase's Site URL moves to the new address so password
resets and signup confirmations land on it, and both spellings get checked in a private
window with the padlock showing.
Sign in to the Cloudflare account that hosts the tour-dash project.
This part takes about five minutes.
On the account home page choose Add a domain, type
tourdash.io, pick the Free plan and continue. Cloudflare scans the
records Namecheap currently serves and offers to copy them.
Delete the A record for tourdash.io that points at
162.255.119.221. That is Namecheap's parking server and it is the reason the
site times out today. Keep the CNAME from tourdash.io to
tour-dash.pages.dev and leave its cloud orange (proxied). Then check the mail
records in section 05 are all present; the scan usually finds the MX and
SPF entries but can miss the DKIM key and the autodiscover records, so add any
that are missing by hand.
The last screen shows two names ending in ns.cloudflare.com.
Copy both. Leave that screen open while you switch to Namecheap.
It is one dropdown and two fields, and nothing else in Namecheap needs to change.
Open Domain List, click Manage next to tourdash.io,
and stay on the Domain tab (not Advanced DNS). Scroll to Nameservers, change
the dropdown from Namecheap BasicDNS to Custom DNS, paste the two Cloudflare
names, and click the green tick. Namecheap warns about 48 hours; it is usually under an hour.
The records on the Advanced DNS tab stop being used at that point, and there is no need to
delete them.
Back in Cloudflare the domain shows Pending nameserver update. Press Check nameservers now after ten minutes or so. When it flips to Active, Cloudflare emails you, and the Pages custom domain should turn Active a few minutes after that on its own.
Three more stops, then the move is finished. The values for the first two are also the last three rows of the table in section 06.
In Workers & Pages, open tour-dash, then Custom
domains, then Set up a custom domain. Type www.tourdash.io, continue,
and activate. Cloudflare creates the DNS record itself now that the domain is in the same
account. If tourdash.io still shows Pending at this point, remove it and add it
again the same way; it comes back Active within a few minutes.
Open the Supabase dashboard, project wwgkjwudnixrfvcbwjpe, then
Authentication, then URL Configuration. Set Site URL to
https://tourdash.io. Under Redirect URLs add
https://tourdash.io/** and https://www.tourdash.io/**, and leave
the existing tour-dash.pages.dev entry in place. The app itself needs no
change for this. It relies on the Site URL for every email link it sends.
Open https://tourdash.io and https://www.tourdash.io
in a private window. Both should show the landing page with the padlock and no warning.
Then send yourself a password reset from the login page and confirm the link in the email
opens on tourdash.io. The Mapbox token has no address restrictions, so the map
needs nothing.
Email for the domain is on Namecheap Private Email. These are the records Namecheap serves tonight; every one of them should exist in Cloudflare before the nameservers change, with the proxy cloud grey (DNS only) on each.
| Type | Name | Value | Notes |
|---|---|---|---|
| MX | tourdash.io | mx1.privateemail.com, priority 10 | Usually copied by the scan |
| MX | tourdash.io | mx2.privateemail.com, priority 10 | Usually copied by the scan |
| TXT | tourdash.io | v=spf1 include:spf.privateemail.com ~all | SPF |
| TXT | privateemail._domainkey | v=DKIM1;k=rsa;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsNqIoN5k1CZp/rBjmjLCS5o5LYOX5yLG5CxD4WrAstUiH5iz3UV435RGTz1Qrd+NOqweInFf0FCkUYsgtRhajicOqBwwVI4A3dYuhxrtDx5v+eVBjoG5vEGApO7UhqRiAVtLM3PykbuT/5HXkJXORyuE9lcjlTWKpuXvP0ttSjwNWmQyxcF+Sr1HOcYyVX9bFV8fat2/Vz5JRNdbqV+sVdWh+x+8AaB/VgKXNQYgV+Aai9Y7f+tgqvcVrBvUR5k7KpklyJ50wkaK+sjHN/KQXDyoSNGmxvwLWMP+gU6UFzic8uDJimaI1FPTk1/m7XbwKm71uaklmSRv3OspQSJzlwIDAQAB | DKIM. Often missed by the scan; paste the whole value |
| CNAME | mail | privateemail.com | Webmail and client setup |
| CNAME | autoconfig | privateemail.com | Mail client auto-setup |
| CNAME | autodiscover | privateemail.com | Outlook auto-setup |
| SRV | _autodiscover._tcp | priority 0, weight 0, port 443, target privateemail.com | Outlook auto-setup. Often missed by the scan |
This is the whole move as one table, for when you are mid-click.
| Where | Field | Value |
|---|---|---|
| Cloudflare, account home | Add a domain | tourdash.io, Free plan |
| Cloudflare, DNS records for tourdash.io | Delete | The A record to 162.255.119.221 |
| Cloudflare, DNS records for tourdash.io | Keep, proxied | CNAME tourdash.io → tour-dash.pages.dev |
| Namecheap, Domain tab, Nameservers | Dropdown | Custom DNS, then the two ns.cloudflare.com names |
| Cloudflare, Workers & Pages, tour-dash, Custom domains | Domain | www.tourdash.io |
| Supabase, Authentication, URL Configuration | Site URL | https://tourdash.io |
| Supabase, Authentication, URL Configuration | Redirect URLs | https://tourdash.io/** and https://www.tourdash.io/** |
The longer explanation of each step, and the reasons behind the route, are in
the Connect a Domain guide. The deploy command does not
change; every deploy updates tourdash.io and tour-dash.pages.dev
together.