Resend — Infraestructura de Email

SSOT. Cualquier otro doc que contradiga este pierde. Reemplaza: Loops.so (T68/T75/T76 superseded), SendGrid (migrado). Ticket de implementación: T153 (Hito Junio, Effort L).


Decisión

CampoValor
Proveedor anteriorLoops.so
Proveedor nuevoResend
Motivo principalAPI developer-first, React Email nativo, entregabilidad enterprise, Auth0 integration, plugin Claude Code oficial
Fecha decisión2026-05-28
Tickets absorbidosT68 Setup Loops · T75 Loops sync · T76 Email templates Loops · T23 Email lifecycle hooks

Alcance de T153

Un solo ticket, Effort L, absorbe todo el stack de email:

ComponenteDetalle
DNS + dominioSPF, DKIM, DMARC vía panel Resend
email.server.tsSDK resend + wrapper tipado; env var RESEND_API_KEY
React Email templates15 templates (3 secuencias × 5 emails) en ES/EN
Lifecycle events13 eventos de ciclo de vida (phase-aware, absorbe T23)
Migración SendGridExport contacts → import en Resend; baja SendGrid
Webhooks inbound/api/email/webhook para eventos de entrega

Secuencias de email (Hito 1)

SecuenciaTriggerEmailsFlow
A — Post auto-testsource=auto-test en /api/leads5 (ES/EN)Flow A
B — Post guíasource=guias en /api/leads5 (ES/EN)Flow B
C — Post waitlistsource=waitlist en /api/leads5 (ES/EN)Flow C

Cada secuencia dispara desde POST /api/leadsemail.server.ts → Resend API.


Lifecycle events (Hito 4 / T153 prep)

Eventos phase-aware que se activan en producción con Stripe:

#EventoMomento
1welcome_capsule_zeroSignup Cápsula Cero
2capsule_completeCápsula Cero finalizada
3urgency_72h72h post-cápsula
4purchase_confirmedStripe webhook payment_intent.succeeded
5phase_1_startRitual Core fase 1 desbloqueada
6phase_2_startRitual Core fase 2 desbloqueada
7phase_3_startRitual Core fase 3 desbloqueada
8phase_4_startRitual Core fase 4 desbloqueada
9subscription_renewalRenovación mensual
10subscription_cancel_confirmConfirmación de baja
11password_resetReset de contraseña (Auth0 + Resend)
12email_verificationVerificación de email (Auth0 + Resend)
13reengagement_30d30 días sin actividad

Integración Auth0

Resend está integrado con Auth0 como custom email provider. Emails de autenticación (verificación, reset de contraseña) van por Resend.

  • Setup: Dashboard Auth0 → Email Provider → Resend + RESEND_API_KEY
  • Avanzado: Auth0 Actions con Resend SDK para sender por organización
  • Monitor: todos los envíos visibles en dashboard Resend

Plugin Claude Code

Resend tiene plugin oficial para Claude Code:

# Instalar
claude plugin install resend@claude-plugins-official
 
# Config (~/.claude/config.json)
{ "env": { "RESEND_API_KEY": "re_xxxxxxxxx" } }

Capacidades del plugin disponibles en sesión:

  • Resend SDK (APIs, contacts, domains)
  • React Email (template dev)
  • Email best practices (SPF/DKIM/DMARC, deliverability)
  • Agent Email Inbox (inbound processing)
  • Resend CLI (CI/CD)

Configuración de entorno

VariableEntornoDescripción
RESEND_API_KEYproduction, previewAPI key de Resend (re_...)
RESEND_FROM_EMAILproduction, previewSender: hola@thefittclub.com
RESEND_DOMAINproduction, previewthefittclub.com (verificado DNS)

Secretos en Cloudflare Workers secrets (no en .env).


Buenas prácticas (Resend docs)

  • Templates en React Email → compilados a HTML/texto antes de enviar
  • Autenticación DNS: SPF + DKIM + DMARC antes de ir a producción
  • Webhooks firmados (header Resend-Signature) validados en /api/email/webhook
  • Rate limit: Resend gestiona el throttling; no reintentar manualmente en el worker
  • Entregabilidad: Tailwind UI usa Resend en producción — “email infrastructure is something we don’t want to think about”

Referencias