offplan · online
Decision · 0011-email-sender

0011 — Email sender architecture — Stage 1 transactional (Resend, 2 own domains)

Approveddecision0011-email-sender

Context

offplan.online нуждается в transactional email infrastructure для Phase 1.2 launch — 7 trial cascade emails (T-7 / T-3 / T-1 / T+0 / T+7 / T+23 / T+29 per plans/onboarding-trial-mode.md Part 2 Step 8) + signup verification + password reset + billing receipts + tier transition notifications, все доставляемые нашему customer'у (Studio / Sales user).

End-state architecture covers 3 sender configurations:

  1. От нашего домена offplan.online — customer-facing (наш B2B surface)
  2. От нашего домена offplanonline.com — buyer-facing fallback (Tier 1 Studios, когда presentation invites уходят к buyers с НАШЕГО домена потому что Studio ещё не имеет Tier 2 custom domain)
  3. От нашего сервиса но с Studio's custom domain (Tier 2+ white-label promise per ADR 0008) — buyer-facing для Tier 2+ Studios

This ADR ratifies architecture для (1) только. Scope intentionally narrow per CONV-39 user decision — Phase 1.2 launch only needs customer-facing transactional (Studio user is recipient; white-label fidelity не relevant). Configurations (2) and (3) parked pending Phase 1.7+ ratification.

CONV-20 historical lean = Resend (recorded in Notion Sessions row 2026-05-07). CONV-39 confirmed Resend ratification + 2-domain audience split + verify-both-now activation phasing.

Decision

Vendor

Resend — Stage 1 transactional ESP for offplan.online.

Sender domain architecture — 2 own domains, audience split

Primary: offplan.online — customer-facing transactional, Phase 1.2 active sending.

Secondary: offplanonline.com — buyer-facing Tier 1 fallback, DKIM-verified but dormant Phase 1.2.

Decision #2 (deferred — future ADR / amendment)

Tier 2+ white-label per-Org client-domain sending NOT ratified в этом ADR. Architectural readiness:

Alternatives Considered

Alternative Status Reason
(A) Single-domain offplanonline.com ❌ Rejected Eliminated by CONV-39 — user confirmed 2 own domains (.online + .com); single-domain breaks audience split + future Tier 2 readiness
(B) Per-Org DKIM self-hosted ❌ Rejected Eliminated by Resend vendor lock + Decision #2 deferral. Self-hosted DKIM = key rotation ops burden not justified Stage 1
(C) Hybrid Tier 1/Tier 2 ❌ Rejected Eliminated by Decision #2 deferral — premature к ratify Tier 2 path
(D) Resend white-label delegation (CONV-20 lean) ✅ Adopted Selected vendor. White-label delegation IS Decision #2 future path (Resend domains.create API) — natively supported, deferred к follow-up ADR
(D1) Verify-both-now phasing ✅ Adopted CONV-39 pick. 15 min extra DNS now < cost of doing later under Phase 1.7+ pressure; prevents domain takeover
(D2) Verify-primary-only phasing ❌ Rejected YAGNI doesn't apply when DNS coordination cost > one-time setup

Other ESPs scanned (no candidate displaced Resend):

Consequences

Revisit trigger

Implementation task card (compact)

Phase 1.2 implementation breakdown — folded into workstreams/onboarding-trial-implementation.md Phase 1.2.3 (trial cascade scheduling). NO separate plans/email-sender-stage-1.md — этот ADR + workstream task list = complete spec.

T1. Resend account + domain verification (~30 min one-time). Owner: Roman + Sergei.

T2. .env.example + secrets distribution. Owner: Sergei.

T3. Send wrapper module. Owner: Roma.

T4. Webhook receiver. Owner: Roma.

T5. Trial cascade template integration (Sub-plan 2 Step 8). Owner: Roma + Ilya.

T6. Smoke test. Owner: Roma.

T7. (Optional) Monitoring.

Cross-references