BCC recipient support in email builder templates

Objective

  • Allow template authors to configure BCC recipients on email builder templates, mirroring the existing CC configuration
  • Prevent internal office or client success email addresses from being visible to clients on automated sends
  • BCC addresses should be configurable as both role-based recipients (via ContactSelect) and manual email addresses (via ManualRecipientInput), matching the CC pattern

Background

  • Shayna Turilli raised this as a UX concern: when the office or client success team is CC'd on client-facing emails, their address is visible to the client in the email header — which reads as awkward and unprofessional
  • A BCC workaround exists today for manually-sent emails but is not configurable on automated email templates
  • The email builder already has full BCC infrastructure in place: EmailBuilderSchema defines bcc: [String], sendResendTemplate.ts passes bcc through to the Resend API, and handleEmailJob already includes bcc in CreateEmailOptions
  • The Email Builder UI (EmailBuilderBase.tsx) renders side-by-side To/CC panels with role and manual address inputs — but has no BCC panel. The save payload in saveEmail() explicitly comments out bcc (// bcc: formData.bcc || []), and bccEmails does not yet exist on the schema — meaning BCC was likely started and intentionally deferred; engineering may have context on why
  • ccEmails exists on EmailBuilderSchema for static CC addresses; a parallel bccEmails field is missing and will need to be added

Product Decisions

Locked

  1. BCC scope — Applies to email builder templates (automated sends) only; manual sends already support BCC
  2. BCC UI layout — Rendered as a collapsible section below the To/CC grid, not as a third column, since BCC will be used infrequently and a third column would add visual clutter
  3. Parity with CC — When expanded, BCC panel mirrors the CC panel: role-based recipients via ContactSelect + manual addresses via ManualRecipientInput

Open

  1. Schema field naming — A bccEmails field needs to be added to EmailBuilderSchema to mirror ccEmails. Confirm naming convention before schema migration.

Scope

Backend (attik monorepo)

  • apps/backend/src/models/emailBuilderSchema.ts — Add bccEmails: [String] field to EmailBuilderSchema, mirroring ccEmails
  • apps/backend/src/routes/emailBuilder.ts — Ensure PATCH route accepts and persists bcc and bccEmails fields
  • apps/backend/src/util/functions/emails/sendResendTemplate.tshandleEmailJob already supports bcc in CreateEmailOptions; confirm bccEmails values are merged into the bcc array at send time, same as the cc + ccEmails pattern

Frontend (attik-frontend)

  • src/app/tools/action-flow/email-builder/[email_id]/EmailBuilderBase.tsx — Add collapsible BCC section below the To/CC grid; uncomment bcc: formData.bcc || [] in saveEmail(); add bccEmails to save payload, originalFormDataRef, and checkForChanges diff
  • src/util/types/serverTypeCollection/emailBuilder.ts — Add bccEmails to the frontend type definition

References

  • ATT-1815 — CC/BCC deduplication (related; covers dedup logic for when BCC is active)
  • attik/apps/backend/src/models/emailBuilderSchema.ts
  • attik/apps/backend/src/util/functions/emails/sendResendTemplate.ts
  • attik-frontend/src/app/tools/action-flow/email-builder/[email_id]/EmailBuilderBase.tsx

Please authenticate to join the conversation.

Upvoters
Status

Planned

Board
🏠

Main App

Date

About 2 hours ago

Author

Linear

Subscribe to post

Get notified by email when there are changes.