What people see
The status says what's true. The phase says what to show. And every outcome becomes exactly one headline, one fix and one action.
Status and phase are different things
A claim's status is stored. Its phase is worked out on every read, from the status and the last check. A pending claim could be waiting for you, or being checked, or waiting on a cache, and those call for very different screens.
The same failure, in each provider's words
Providers call the same fields different things, and saying the wrong word sends people hunting. The copy always uses the provider's own.
| Provider | The fix we show |
|---|---|
| GoDaddy | In GoDaddy, replace the Value with the one from the Copy button. |
| Cloudflare | In Cloudflare, replace the Content with the one from the Copy button. |
| Namecheap | In Namecheap, replace the Value with the one from the Copy button. |
| Amazon Route 53 | In Amazon Route 53, replace the Value with the one from the Copy button. |
The copy rules
These came out of the research, and a test enforces them across every outcome.
| Rule | Instead of | We say |
|---|---|---|
| Never blame | You entered it wrong | We can't see the record yet |
| No judgement words | Invalid value | One character looks right but isn't the same |
| Name who we're waiting on | Pending | We're waiting on Google Public DNS |
| Lead with the typical time | Can take up to 48 hours | Usually a few minutes |
| One fix per failure | Check your settings and try again | In Cloudflare, replace the Content |
Every outcome also gets exactly one primary action. There's no menu of things to try. The action is one of check_now, wait, new_code or none.
Alerts follow the same rules. Their words are written in packages/core/src/alerts.ts, next to the rest of the copy, and alerts.test.ts checks that every title names the domain, fits in 60 characters and never uses a blaming word.