---
id: w5/m10/t005
title: Dashboard — DNS instructions panel with copy + status re-check
worker: worker5
status: done
estimate: 60m
depends_on: [w5/m10/t002, w5/m10/t004]
---

## Objective

Render the DNS instructions in the dashboard, matching the t003 capture: after adding a domain (and on each pending row's expansion), show the record to create — type, host, target — with copy-to-clipboard, plus a verify/re-check action that refreshes the row's verification/serving status. This closes `w5/006` end to end.

## Context

- `dashboard/src/features/services/components/custom-domains-section.tsx` — the existing add/list/delete + status UI (w1/m11.5); the panel extends it.
- `dashboard/src/features/services/api/custom-domains.graphql` + `use-custom-domains.ts` — add the new DNS fields and the verify mutation; regenerate codegen.
- `useCopyToClipboard` hook already exists (shipped in w5/m8's simplify).
- Update `dashboard/scripts/local-bex.mjs` so the stub serves the new fields/mutation (keeps the offline flow verifiable — this is the follow-through on t001's per-service store).

## Steps

1. Extend the GraphQL selection set + hooks with DNS-record fields and the verify mutation; run codegen.
2. Add the instructions panel: shown right after a successful add and expandable per pending row; copy buttons for host/target; apex vs subdomain wording per capture; strings via `useTranslations()`.
3. Wire the verify action to re-fetch/re-check the row's status; update the stub to serve the new shape.
4. Verify offline against the fixed stub, both services, subdomain + apex cases.

## Files

- `dashboard/src/features/services/components/custom-domains-section.tsx` (+ new panel component)
- `dashboard/src/features/services/{api/custom-domains.graphql,hooks/use-custom-domains.ts}`
- `dashboard/src/features/services/locales/{en,zh}.ts`
- `dashboard/scripts/local-bex.mjs`

## Acceptance criteria

- [ ] Adding a subdomain immediately shows "create a CNAME from `<host>` to `<platform-host>`" with working copy buttons; apex shows the captured apex guidance.
- [ ] Verify/re-check updates the row's verification/serving badges without a page reload.
- [ ] Works offline against the stub for two distinct services; `yarn lint && yarn typecheck && yarn test` green.

## Out of scope

- Automatic DNS polling loops beyond the capture's behavior; registrar-specific guides.
