Changelog

What shipped

New capabilities in the connect flow and the API, SDK releases, Domain Connect provider proofs, monitoring and pricing changes — dated, in plain language, newest first. Internal refactors are left out on purpose.

  1. Sign-up funnel, seven comparison pages, this changelog

    • Every "Start free" button on dodomain.io now opens the app on Create your account instead of the sign-in form.
    • New sourced comparison pages: customdomain.ai, Domainee, SaaSKevin and SaaS Custom Domains, each with a dated "facts checked" line and an honest "where they still win" section; the Entri page is rewritten for people looking for an Entri alternative.
    • Free DNS drift monitoring is now stated as what it is — on every plan, never a metered add-on — on the home page and in the docs.
    • @dodomain/node, @dodomain/connect and @dodomain/react describe themselves on npm as custom domains for SaaS with Domain Connect support (README and keywords; no code change).
    • This public changelog.
  2. What DNS actually says, and a real pricing page

    • The connect flow now shows an expected-vs-found diff for every record — the value your customer's authoritative DNS currently returns next to the value the session asked for — and its propagation copy stops promising things DNS cannot promise.
    • White-label attribution: integrators can hide the "powered by" line in the hosted flow.
    • A dedicated pricing page with the quota rules spelled out, and the sitemap derived from the real docs directory so new docs pages can never fall out of it.
    • Nightly Lighthouse budgets over the live public pages, so a page-weight regression is caught even when no pull request touched the page.
  3. Teams, and a drift monitor that confirms before it alerts

    • Multi-team accounts: a user can belong to several teams, switch between them, and every OAuth / MCP grant is pinned to the team it was consented for.
    • Drift monitoring now paces itself by a connection's age — every 10 minutes for its first day, hourly for a week, then every 6 hours — and a suspected break must be confirmed on three consecutive checks before connection.failed fires. Recovery is still noticed on the first healthy check.
    • Secret-key rotation can keep the previous key valid for an overlap window (0, 1 or 24 hours) so a rollout never has a dead minute.
    • A test send for a new webhook endpoint, plus a never-delivered hint, so an endpoint is proven before it matters.
  4. @dodomain/react, a full-surface Node SDK, dashboard rework

    • `@dodomain/react` published: a useDoDomainConnect hook and a drop-in button around the connect widget.
    • `@dodomain/node` 0.3.0 covers the whole v1 API — sessions, connections, apps, domains, webhook endpoints, key rotation, and the webhook verifier. All three npm packages now release from the public mirror over OIDC trusted publishing.
    • The dashboard was rebuilt page by page: a sidebar shell with an app switcher, connections and sessions pages with a connect funnel by tier and provider, webhook endpoint health with a deliveries master-detail view, an overview with a system strip and needs-attention list, URL-backed filters, an onboarding checklist, a command palette (⌘K), a domain preflight inspector, and app detail tabs with an allowed-origins editor.
    • Themed 404 pages with working dark mode on both the marketing site and the app.
  5. Hard caps, background verification, teams with roles

    • Every plan's monthly connection allowance is now a hard cap: creating a session past it returns 402 quota_exceeded, nothing already connected is affected, and there is no overage billing. Subscription state is reconciled against RevenueCat hourly so a dropped webhook cannot leave a team on the wrong plan.
    • Open sessions are verified in the background: if your customer adds the record and closes the window without clicking Verify, the session still completes and you still get connection.verified and session.completed.
    • Multi-user teams with invitations and an enforced role hierarchy (owner / admin / member).
    • REST lifecycle for webhook endpoints and self-service secret-key rotation, all in /api/v1.
    • The published OpenAPI 3.1 description is generated from the same schemas the API validates with, at dodomain.io/docs/openapi.
    • GET /api/v1/connections/:connectionId and a connections namespace in the Node SDK.
    • Apex-domain guidance in the docs: which record types work at the zone root, and which providers offer ALIAS / ANAME / CNAME flattening.
    • The hosted flow stops promising one-click where no connector exists for the user's provider.
  6. Both Domain Connect templates proven on a live provider

    • The custom-subdomain-cname template completed a real signed apply end to end on Glauca HexDNS — the provider wrote the CNAME, DoDomain verified it at the authoritative nameservers, the session verified and session.completed was delivered. With the domain-verification (TXT) template proven on 2026-08-06, both shipped templates have now round-tripped on a real third-party provider.
    • The Domain Connect signature-and-key emission order is chosen per DNS provider, matching what each provider's implementation actually accepts.
  7. Docs at dodomain.io/docs, account deletion, Sign in with Apple, a cleaner webhook body

    • The developer documentation moved to dodomain.io/docs, with search, and every old /guides URL redirects.
    • In-app account deletion and Sign in with Apple.
    • The webhook body is now { id, type, occurredAt, data }; the old event key is still sent as a deprecated alias so existing receivers keep working.
    • The first end-to-end Domain Connect proof on a live provider: the domain-verification template on Glauca HexDNS, every hop real.
    • Verification interrogates the zone that actually owns the record (the nearest zone cut), so delegated subzones verify correctly.
  8. The embedded sheet

    • @dodomain/connect opens as a content-sized sheet that adopts the host page's theme; provider authorization opens in a popup and the sheet auto-verifies when the user returns.
    • The home page's "connection lab" mirrors the real hosted flow instead of a mock-up.
  9. SDKs on npm, and a review sweep

    • `@dodomain/node` and `@dodomain/connect` 0.1.0 published to npm — zero runtime dependencies, dual ESM/CJS, MIT.
    • A domain that stops resolving entirely is reported as domain_not_found rather than as a missing record; the drift monitor never flips a connection on an inconclusive check.
    • Webhook endpoint URLs must be unique per app and are capped per plan; every outbound request to a URL a customer chose is vetted against private address space.
    • Devino Solutions Inc named as the operator in the terms and privacy policy.
  10. List and disconnect connections, honest failure reasons

    • GET /api/v1/connections (paged) and DELETE /api/v1/connections/:connectionId — disconnecting stops monitoring for good.
    • The two 429s are told apart (rate_limited per app vs per IP), and connection.failed says whether it is about one connect attempt or a live connection that regressed.
    • Re-verifying a session that already finalized meters usage and emits session.completed exactly once.
    • The tier-1 (Cloudflare OAuth) apply can add a TXT record beside existing SPF or site-verification records at the apex instead of refusing.
    • Domain Chief became the first DNS provider to enable DoDomain's Domain Connect templates (2026-07-28); a nightly watch now opens an issue the moment another provider does.
  11. Templates merged into the public Domain Connect registry

    • Both DoDomain templates (domain-verification and custom-subdomain-cname) were merged upstream, and DoDomain's public signing key is published as a chunked TXT record at _dck1.dckeys.dodomain.io per the registry's guidance.
  12. Domain Connect (tier 2) switched on in production

    • Signed one-click applies are live for any DNS provider that enables DoDomain's templates; where a provider has not, the flow degrades to guided records with the same authoritative verification.
  13. The connect flow, provider guides, and the platform underneath

    • The hosted connect flow was rebuilt with live per-record verification, and 17 provider-specific DNS guides with nameserver detection (Cloudflare, GoDaddy, Namecheap, Squarespace, Route 53, DigitalOcean, DNSimple, Gandi, IONOS, Name.com, NameSilo, Porkbun, Vercel, Wix, WordPress.com and more).
    • Public developer docs, llms.txt and a sitemap; a public POST /api/v1/domains/check pre-flight and on-demand connection re-verify.
    • Dashboard: webhook delivery log with redrive, key rotation, HTTPS-only endpoint validation, a quickstart, usage banners and health badges.
    • All four webhook events (connection.verified, connection.failed, session.completed, session.abandoned) with retries and a dead-letter queue, delivered by a standalone worker; plan-based rate limiting.
    • The Graphite & Pine design system across the app, the marketing site and the widget.
  14. One deployment unit

    • Production moved to a single compose-defined stack (web, worker, database, landing) built from the same file that runs locally and in CI.