# 10-Feb-2026 — Committee,cloudflare and Committee,mail,cloudflare: 1 feature and 1 fix [#125](https://github.com/nbarrett/ngx-ramblers/issues/125)

## [build 473](https://github.com/nbarrett/ngx-ramblers/actions/runs/21860135871) — [commit 30025c7](https://github.com/nbarrett/ngx-ramblers/commit/30025c788d15c4a71a4f2aa1c0b9022bacfbbe0e)

_____

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