# Email templates: brand + hygiene pass
**Date:** 2026-06-26
**Status:** Design (spec only — no implementation)
**Scope:** `email/` directory of `nodebb-theme-westgate`.
## Problem
The 10 templates under `email/` are NodeBB core's Cerberus boilerplate copied
verbatim. Three issues:
1. **No brand.** All colors are generic greys — `#f6f6f6` page, `#ffffff`
card, `#222222` button, `#333/#555/#888/#aaa` text. None of the Westgate
palette (plum, gold, red, parchment) appears anywhere. Emails do not look
like they came from the same product as the forum.
2. **Massive duplication.** Each template inlines the full `
` (reset CSS,
media queries), header, and footer — ~400 lines per file, ~390 of them
identical across all 10. `partials/header.html`, `partials/footer.html`, and
`partials/post-queue-body.html` exist but **nothing imports them** — they are
dead code, and the README wrongly claims they are included.
3. **Inbox hygiene gaps.** Every template has an empty `` and no
preheader (inbox preview text). These make messages look unfinished in the
inbox list and are easy wins under deliverability heuristics.
## Goals
- Reskin all 10 templates to the Westgate brand using a **light, client-robust**
treatment (not full dark — see Rejected alternatives).
- Eliminate the duplication by wiring up real shared partials with Benchpress
`IMPORT`, mirroring how NodeBB core structures its own email templates.
- Close the template-level hygiene gaps (real ``, preheader, valid HTML,
no hardcoded copy).
- Document the deliverability work that templates **cannot** fix, so the reskin
is not mistaken for a complete anti-spam fix.
## Non-goals
- Full dark-background email design (rejected — see below).
- Rewriting user-facing copy / in-world tone. Copy stays in the existing
`[[email:…]]` keys; this pass only adds keys that are missing. A copy/voice
pass is a separate language-file task.
- Any change to SPF/DKIM/DMARC, sending domain, or mail-server config (out of
template scope; flagged below for ops).
## Constraints (email rendering)
These shape every decision and must be respected in implementation:
- **No CSS custom properties.** Outlook and Gmail strip `var(--…)`. The brand
palette is therefore applied as **literal hex, inline on each element**. The
`--wg-*` tokens in `scss/westgate/_tokens.scss` are the source of truth for
the values, but cannot be referenced at runtime — they are copied as literals.
- **Table layout, inline CSS, MSO conditional comments stay.** Do not refactor
into modern/flex/grid CSS. The shared `