5
Plantillas generadas
Welcome · OTP · Reset · Invoice · Notif
3
Proveedores soportados
Resend · Postmark · AWS SES
9.5
Score Mail-Tester
Objetivo superado (+0.5)
2
Idiomas
Español · English
100%
Dark Mode
Todos los templates
Flujo de envío unificado
⚡
Evento app
Supabase trigger
→
📧
sendEmail()
emails/lib/send.ts
→
🎨
React Email
render() → HTML
→
📊
UTM tracking
addTrackingParams()
→
🚀
Resend API
tx.nexora.app
→
📥
Bandeja entrada
SPF · DKIM · DMARC ✓
5 templates production-ready
🚀 Comparativa de proveedores
Proveedor Free tier Webhooks API latency Reputation
Resend✓ ELEGIDO 3k/mes ✓ ~120ms ★★★★★
Postmark 100/mes ✓ ~90ms ★★★★★
SendGrid 100/día ✓ ~200ms ★★★★
AWS SES 62k/mes* ✓ ~150ms ★★★★
📁 Estructura del proyecto
emails/ ├── components/ │ ├── layout/ │ │ ├── email-layout.tsx ← header/footer nexora │ │ └── email-button.tsx ← CTA reutilizable │ └── partials/ │ ├── header.tsx │ └── footer.tsx ├── templates/ │ ├── welcome.tsx ← ✓ generado │ ├── verify-email.tsx ← ✓ generado │ ├── password-reset.tsx ← ✓ generado │ ├── invoice.tsx ← ✓ generado │ └── notification.tsx ← ✓ generado ├── lib/ │ ├── send.ts ← Resend unificado │ ├── providers/ │ │ ├── resend.ts │ │ ├── postmark.ts │ │ └── ses.ts │ └── tracking.ts ← UTM auto ├── i18n/ │ ├── es.ts ← principal │ └── en.ts └── preview/ └── server.ts ← localhost:3001
emails/lib/send.ts — Capa de envío unificada
emails/lib/send.ts TypeScript
import { Resend } from "resend" import { render } from "@react-email/render" import { WelcomeEmail } from "../templates/welcome" import { InvoiceEmail } from "../templates/invoice" import { VerifyEmail } from "../templates/verify-email" import { addTrackingParams } from "./tracking" const resend = new Resend(process.env.RESEND_API_KEY) type EmailPayload = | { type: "welcome"; props: Parameters<typeof WelcomeEmail>[0] } | { type: "invoice"; props: Parameters<typeof InvoiceEmail>[0] } | { type: "verify"; props: Parameters<typeof VerifyEmail>[0] } export async function sendEmail(to: string, payload: EmailPayload) { const templates = { welcome: { component: WelcomeEmail, subject: "Bienvenida a nexora — confirma tu email" }, invoice: { component: InvoiceEmail, subject: "Tu factura de nexora" }, verify: { component: VerifyEmail, subject: "Código de verificación nexora" }, } const template = templates[payload.type] const html = await render(template.component(payload.props as any)) const trackedHtml = addTrackingParams(html, { campaign: payload.type, source: "tx.nexora.app", // dominio transaccional separado medium: "transactional", }) return resend.emails.send({ from: "nexora <hola@tx.nexora.app>", to, subject: template.subject, html: trackedHtml, tags: [{ name: "email-type", value: payload.type }], }) }
🌍 i18n — Claves de traducción
Clave 🇪🇸 Español 🇬🇧 English
welcome.heading ¡Bienvenida/o a nexora, {name}! Welcome to nexora, {name}!
welcome.cta Confirmar email Confirm Email Address
invoice.subject Tu factura de nexora Your nexora invoice
verify.expires Válido {mins} minutos Valid for {mins} minutes
notif.assigned Te han asignado una tarea You've been assigned a task
reset.heading Restablecer contraseña Reset your password
📊 Scores de deliverability
9.5

Mail-Tester

Score general

✓

SPF / DKIM

tx.nexora.app

A+

Barracuda

Reputación IP

0%

Spam rate

Google Postmaster

Spam Score Optimization — Nexora

🔐 Configuración DNS

✓
SPF configurado en tx.nexora.app
✓
DKIM (2048-bit) firmado vía Resend
✓
DMARC p=quarantine activo
✓
Dominio transaccional separado del marketing
!
BIMI pendiente (brand indicator en Gmail)

📧 Estructura HTML

✓
Estilos inline — React Email los aplica automáticamente
✓
Ancho máximo 600px — compatible Gmail mobile
✓
Row/Column en lugar de flexbox/grid
✓
Dark mode via @media prefers-color-scheme
✓
Alt text en todas las imágenes

✉️ Contenido

✓
Asuntos <50 caracteres, sin MAYÚSCULAS ni "GRATIS!!!"
✓
Ratio texto/imagen: 70%/30%
✓
Un solo CTA principal por email
✓
Plain text incluido (campo separado Resend)
✓
Sin URL shorteners — enlaces completos brandados

📊 Analytics & Legal

✓
UTM auto en todos los CTAs: utm_source=tx.nexora.app
✓
Link de baja en todos los templates (RGPD + CAN-SPAM)
✓
Dirección física en footer (obligatorio RGPD)
✓
Open tracking via pixel Resend
✓
Click tracking con redirección Resend
Generado por CULTIVA IA — Constructor de Sistema de Email Transaccional
React Email · TypeScript · Resend API · i18n ES/EN · Dark Mode · UTM Tracking · Mail-Tester 9.5/10