10-Feb-2026 — Committee,cloudflare and Committee,mail,cloudflare: 1 feature and 1 fix #125
Committee Email Routing
Manage email forwarding from Committee Settings
- Each committee role now has a dedicated Inbound Forwarding tab where admins
can configure how incoming emails to the role address are delivered
- Choose from four forwarding modes: Member's personal email, Custom address,
Multiple recipients, or No forwarding
- Multiple-recipient forwarding uses Cloudflare Email Workers, with recipients
selectable from existing members or entered manually
- Existing Cloudflare Worker recipients can be imported automatically when detected
Email routing status and actions
- A live status banner shows the current state of each role's Cloudflare routing rule:
Forwarding Active (green), Not Configured (amber), Outdated (amber),
Not Available, or Error (red)
- One-click Create, Update, and Delete buttons manage routing rules
directly — no need to log into the Cloudflare dashboard
- Destination email addresses are automatically registered and verified in Cloudflare
Email routing logs
- A new Email Logs tab appears on roles that have an active Cloudflare Worker
- View timestamped logs of inbound email processing including sender, recipient,
and delivery status
- Logs are sortable and filterable for easy troubleshooting
Outbound email sender configuration
- The Outbound Email tab lets admins derive the sender address from the Role
name or the member's Full Name, with domain validation
- Inline Brevo sender creation and verification — register, amend, or delete senders
without leaving the page
- Sender status is shown at a glance with verification badges
Contact Us integration
- The Contact Us tab configures how contact form submissions are routed for each role
- A ready-to-use markdown link is generated for embedding in page content, directing
visitors to the contact form pre-filled with the correct role
Inline help documentation
- Every tab (Role Details, Outbound Email, Inbound Forwarding, Contact Us, Email Logs)
now includes an editable markdown help section at the top explaining its purpose
- Help content is pre-populated with sensible defaults and can be customised per site
Committee settings page improvements
- Redesigned committee settings with a sortable, searchable table and inline role editing
- URL deep-linking to individual roles via
?edit=role-type query parameter
- Role type categorisation (Committee, Group, System) with built-in role mapping
Mail Settings Enhancements
Senders management
- New Senders tab in Mail Settings provides a searchable, sortable table of all
Brevo senders
- View verification status, associated committee role, and active/inactive state
- Delete orphaned or unused senders directly from the list
- Senders linked to committee roles are cross-referenced for easy navigation
Brevo template management
- New Push Default Template action overwrites the Brevo template content from
local HTML defaults
- Template Diff indicator shows whether a Brevo template matches the local default
(colour-coded badge: green = in sync, amber = differs)
- Brevo editor links now offer both Rich Text and HTML/Setup editor options via dropdown
Mail settings loading states
- All mail settings tabs now show a spinner while configuration is loading, preventing
blank or broken UI during initial load
Environment & Cloudflare Configuration
Per-environment Cloudflare configuration
- Cloudflare settings (API token, Zone ID) are now configured per environment,
supporting multi-site deployments where each site has its own Cloudflare zone
- Configuration is encrypted with AES-256-GCM when passed as an environment variable
- The base domain is automatically derived from each environment's group URL
Environment settings refactor
- The environment settings page has been split into focused sub-components:
Global Settings, Per-Environment Settings, and Config Tools
- New Cloudflare URL input component for consistent Cloudflare dashboard links
- New Cloudflare Settings section showing the resolved per-environment configuration
Technical Changes
New components and services
CloudflareEmailRoutingService — frontend service with BehaviorSubject caching for
rules, destination addresses, workers, catch-all rules, and non-sensitive config
EmailRoutingStatusComponent — reusable routing status display with action buttons
EmailRoutingLogComponent — Cloudflare Worker log viewer with sorting and filtering
MailSendersListComponent — searchable/sortable senders table
CloudflareButtonComponent — branded Cloudflare action button
DisplayDateAbbreviatedTimePipe — date formatting pipe for log timestamps
New server-side API endpoints
/api/cloudflare/email-routing/rules — CRUD for email routing rules
/api/cloudflare/email-routing/destination-addresses — manage verified destinations
/api/cloudflare/email-routing/workers — list email worker scripts
/api/cloudflare/email-routing/catch-all — get catch-all rule
/api/cloudflare/email-routing/config — non-sensitive Cloudflare config
/api/cloudflare/email-routing/analytics — Cloudflare GraphQL analytics queries
/api/cloudflare/email-routing/worker-invocations — worker invocation logs
/api/brevo/senders/delete — delete a Brevo sender
/api/brevo/senders/update — update a Brevo sender
/api/brevo/templates/push-default — push local template to Brevo
/api/brevo/templates/diff — compare local vs Brevo template content
Models and utilities
- Extended
CommitteeMember model with emailDerivation, forwardEmailTarget,
forwardEmailCustom, forwardEmailRecipients, and nameAndDescription fields
- New
cloudflare-email-routing.model.ts with comprehensive types for rules,
destinations, workers, analytics, and log entries
- Extended mail model with
Sender, SenderSortField, and SendersResponse types
BrevoDropdownItem model for dropdown menu entries
- Extracted
validEmail() and normaliseEmail() utilities to shared strings.ts
Refactoring
- Streamlined AGENTS.md guidance documentation
- Split monolithic environment-settings component into sub-components
- Refactored third-party button components with consistent loading/disabled states
- Renamed
ENVIRONMENT_SETUP_ENABLED to PLATFORM_ADMIN_ENABLED
CommitteeConfigService extended with nameAndDescriptionFrom() helper
committee,cloudflare: gracefully handle missing Cloudflare config and always show email logs
- Sites without Cloudflare configuration now return configured: false instead of a 500 error, hiding email forwarding features gracefully rather than showing an alarming error banner.
- The Email Logs tab isnow shown whenever Cloudflare is configured, not only for worker-based multi-recipient routes