# Custom domain

A step of the [Cloud application](https://gradus.kazet.blog/tree/cloud-application) tree on Gradus, in the Frontend area: Second app, UI, browser tests.

Page: https://gradus.kazet.blog/tree/cloud-application/step/custom-domain

Attach the product's own domain to the frontend and the service over HTTPS, renewed, locked and safe from spoofing, so every link you share from now on stays yours.

Usually comes after: [Deploy the frontend](https://gradus.kazet.blog/tree/cloud-application/step/frontend-deploy).

Leads to: [Feedback loop](https://gradus.kazet.blog/tree/cloud-application/step/feedback-loop), [Landing page](https://gradus.kazet.blog/tree/cloud-application/step/landing-page), [Icons & manifest](https://gradus.kazet.blog/tree/cloud-application/step/icons-and-manifest), [Crawl rules & sitemap](https://gradus.kazet.blog/tree/cloud-application/step/crawl-rules).

## Prompt for your AI assistant

```
Read docs/product/pitch.md for the product's name and domain. If no domain is bought yet, stop and ask me to buy one. Point it at the deployed frontend and service with the DNS records the platform needs, in the infrastructure code if this repository has any, and remove any old record that points elsewhere. Serve it over HTTPS, choose one canonical address, redirect the www form to it and make plain http answer with a 301 to https that keeps the path and query. Turn off the platform's own default address, such as a run.app or workers.dev host, or redirect it to the canonical one, and check whether a search engine has indexed it already. Ask me to turn on auto-renew, the registrar lock and DNSSEC at the registrar, then check DNSSEC from outside. Until this product sends mail, publish a null SPF record and a DMARC policy of reject, so nobody can send mail as this domain. Write the registrar, the expiry date and these choices into docs/, then update the CORS settings, the post-deploy checks and the README.
```

Every step of the tree: https://gradus.kazet.blog/tree/cloud-application/llms.txt
