feat(emails): rebrand onboarding + recovery emails to bunyip-web tokens #303
No reviewers
Labels
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
psa-systems/bunyip!303
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/BUNYIP-288-email-rebrand"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The onboarding + recovery emails shipped with an indigo dark palette (
#0d0b14body, orange->indigo gradient buttons) that had no relationship to bunyip-web's live theme. A user who clicked from an email to the dashboard read the two surfaces as different products. Also,account_createdopened a tier-pricing pitch (Personal $3/mo, Business $15/mo, "locked for life") which is an odd tone for a "welcome, you just signed up" email.Retarget five onboarding + recovery templates (account_created, email_verify, email_change_verify, password_reset, magic_link) to bunyip-web's warm-green tokens resolved from
bunyip-web/input.css's dark-mode block:Email clients cannot evaluate CSS variables, so the palette is baked in as resolved hex. Dark palette only: the live dashboard defaults to dark, and a single confident palette renders more predictably across mail clients than a
prefers-color-schemeswap. The base.html header comment documents the HSL -> HEX resolution table so a future palette refresh has a greppable trail.Copy:
account_createddrops the tier pitch and reframes the email as a welcome that names Bunyip as SSO for the PSA Systems suite, with one CTA to the dashboard.email_verify/email_change_verify/password_reset/magic_linkkeep their one-paragraph shape with cleaner wording and the same variable surface (verify_url,reset_url,magic_link_url,dashboard_url,app_name,base_url,year); no handler orEmailService::send_*change.Out of scope: the remaining ~9 transactional templates (
payment_*,membership_canceled,grace_period_reminder,feedback_response,admin_*) keep the previous shell for this PR; a follow-up sweeps them once the palette has validated in real clients.#BUNYIP-288
The onboarding + recovery emails shipped with an indigo dark palette (`#0d0b14` body, orange->indigo gradient buttons) that had no relationship to bunyip-web's live theme. A user who clicked from an email to the dashboard read the two surfaces as different products. Also, `account_created` opened a tier-pricing pitch (Personal $3/mo, Business $15/mo, "locked for life") which is an odd tone for a "welcome, you just signed up" email. Retarget five onboarding + recovery templates (account_created, email_verify, email_change_verify, password_reset, magic_link) to bunyip-web's warm-green tokens resolved from `bunyip-web/input.css`'s dark-mode block: --background: hsl(120, 8%, 9%) -> #151915 --card: hsl(120, 8%, 12%) -> #1c211c --foreground: hsl(120, 21%, 96%) -> #f3f7f3 --primary: hsl(116, 28%, 31%) -> #395f39 --primary bright: hsl(116, 34%, 46%) -> #4d9a54 --muted-foreground: hsl(113, 15%, 60%) -> #93a795 Email clients cannot evaluate CSS variables, so the palette is baked in as resolved hex. Dark palette only: the live dashboard defaults to dark, and a single confident palette renders more predictably across mail clients than a `prefers-color-scheme` swap. The base.html header comment documents the HSL -> HEX resolution table so a future palette refresh has a greppable trail. Copy: `account_created` drops the tier pitch and reframes the email as a welcome that names Bunyip as SSO for the PSA Systems suite, with one CTA to the dashboard. `email_verify` / `email_change_verify` / `password_reset` / `magic_link` keep their one-paragraph shape with cleaner wording and the same variable surface (`verify_url`, `reset_url`, `magic_link_url`, `dashboard_url`, `app_name`, `base_url`, `year`); no handler or `EmailService::send_*` change. Out of scope: the remaining ~9 transactional templates (`payment_*`, `membership_canceled`, `grace_period_reminder`, `feedback_response`, `admin_*`) keep the previous shell for this PR; a follow-up sweeps them once the palette has validated in real clients. #BUNYIP-2888680d6eee3a6503bce50