Skip to content

Move compliance branding and contact info to trust center#1437

Draft
gearnode wants to merge 7 commits into
mainfrom
cursor/compliance-branding-consolidation-bd0e
Draft

Move compliance branding and contact info to trust center#1437
gearnode wants to merge 7 commits into
mainfrom
cursor/compliance-branding-consolidation-bd0e

Conversation

@gearnode

@gearnode gearnode commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Summary

Moves organization contact information (description, website, email, headquarter address), custom domain management, and branding from organization settings to the compliance page Brand tab. Contact fields and custom domain are stored on trust_centers instead of organizations.

Changes

  • Database: Migrations copy contact fields and custom_domain_id from organizations to trust_centers, then drop them from organizations
  • Backend: Contact fields and customDomain on TrustCenter; removed from Organization GraphQL types and update mutations across connect/console/trust/MCP
  • Custom domain: custom_domain_id FK on trust_centers; create/delete mutations use trustCenterId; domain resolution loads trust center directly
  • Console: Organization settings form shows only name and logos; compliance page Brand tab has contact info, custom domain, and branding controls
  • Public apps: Compliance portal and trust app read contact info from trustCenter
  • n8n: Removed contact fields from organization operations; added them to trust center get/update
  • Tests: Organization update e2e covers name only; trust center contact info e2e tests

Where to manage compliance page settings

Compliance page → Brand tab (/organizations/:id/compliance-page/brand):

  • Description, website URL, email, headquarter address
  • Custom domain
  • Logo / dark logo

Organization settings (/iam/organizations/:id/settings):

  • Organization name
  • Logo / horizontal logo only
Open in Web Open in Cursor 

Summary by cubic

Moves custom-domain ownership and all contact info to the TrustCenter, and consolidates editing into the compliance page Brand tab. Migrations and API/service updates preserve existing data and domains, and domain actions now use trustCenterId.

Tests +99 -47

  • Update e2e to edit org name only; contact fields moved
  • RBAC checks now target name on Organization

Coredata +172 -98

  • Migration 1: add description, website_url, email, headquarter_address to trust_centers; copy from organizations; drop from organizations
  • Migration 2: add custom_domain_id to trust_centers; copy from organizations
  • Update models: contact fields and custom_domain_id on TrustCenter; remove from Organization

GraphQL API +79 -96

  • Expose contact fields and customDomain on TrustCenter; remove from Organization (connect/console/trust)
  • Extend UpdateTrustCenterBrandInput with contact fields; resolvers wired to service
  • Organization customDomain field removed; domain flows now resolve via trust center

MCP +19 -26

  • Switch CreateCustomDomain tool to trustCenterId
  • Drop org description from types/spec; update spec for trust center domain inputs

Service +134 -153

  • Custom domains managed via TrustCenter (Create/Delete accept trustCenterId)
  • Domain resolution and email presenter configs read customDomainId and website/HQ from TrustCenter
  • UpdateTrustCenterBrand now updates contact fields; validation added
  • Remove org contact-field handling from IAM/Probo services

App: console +234 -181

  • Brand tab: add Contact information section and integrate Custom Domain
  • Domain dialogs accept trustCenterId; remove separate Domain route/loader
  • IAM Organization form removes contact fields; layout reads domain from trust center

App: trust +13 -13

  • Read description, website, email, HQ from TrustCenter; update queries and sidebar

Package: n8n-node +136 -95

  • Remove org contact fields from organization ops
  • Add contact fields to trust center get/update; tri-state Active and split settings vs. brand

Other +26 -26

  • Rename compliance portal contact component to CompliancePageContactInfo and fix import order

Written for commit c8cc582. Summary will update on new commits.

Review in cubic

cursoragent and others added 7 commits July 1, 2026 10:24
Custom domain management now lives on the compliance page Brand tab
alongside logos, contact fields, and frameworks. Description, website,
email, and headquarters move from organizations to trust_centers with a
data migration so existing values are preserved on the public page.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
Separate parent and sibling relative import groups and sort
generated type imports alphabetically for eslint.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
Organization description, website, email, and headquarter address
now live on the trust center only. Drop those fields from n8n
organization operations and expose them on trust center get/update
instead so automations stay aligned with the compliance page.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
OrganizationContactInfo read trust center fields but kept the old
organization naming from before the data move. Rename it to
CompliancePageContactInfo so the component name matches what it shows.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
Sort Hero imports alphabetically after renaming the contact
component so eslint import-x/order passes in CI.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
Store custom_domain_id on trust_centers instead of organizations,
matching how contact info and branding already live on the compliance
page. Update APIs, domain resolution, and console UI to create, read,
and delete domains via trustCenterId.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
Add the blank line required by wsl_v5 before the return in
GetCustomDomainByOrganizationID.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants