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
/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