Arquitectura

Visión general del sistema

Cómo se conectan los componentes que hacen posible una campaña de MediNodo, desde la creación del envío hasta el registro del interés y la gestión de fallos.

Resumen

El sistema se organiza en cuatro planos que colaboran pero mantienen responsabilidades separadas:

Plano de envío

listmonk compone las campañas y las entrega a través de Amazon SES por SMTP autenticado.

Plano de interacción

El destinatario hace click, llega a la landing en Vercel y confirma su interés vía FastAPI.

Plano de feedback

SES publica rebotes y reclamos por SNS hacia un webhook de listmonk, que aplica blocklist.

Plano de datos y borde

PostgreSQL persiste todo; Cloudflare enruta y protege los hostnames públicos.

Mapa de alto nivel

Este diagrama muestra el camino principal de una campaña sin los detalles de fallo, que se documentan por separado en Flujos.

Diagrama: Camino principal: creación, envío, entrega, click e interésDiagrama: Camino principal: creación, envío, entrega, click e interés
Camino principal: creación, envío, entrega, click e interés

Capas del sistema

CapaComponentesFunción
Composiciónlistmonk, PostgreSQLDefinir campañas, listas y suscriptores; generar enlaces individuales.
TransporteAmazon SES, AWS IAMAutenticar y entregar el correo a los proveedores de destino.
BordeCloudflare DNS, Cloudflare Tunnel, Caddy (local)Resolver dominios, publicar autenticación y exponer servicios privados.
ExperienciaVercel (Next.js), Turnstile, UpstashServir la landing y proteger el formulario de interés.
AplicaciónFastAPIValidar campaña-suscriptor, aplicar idempotencia y registrar el interés.
FeedbackAmazon SNS, listmonkPropagar hard bounces y complaints y aplicar blocklist.

Matriz de responsabilidad

Cada componente hace una cosa y la hace bien. Estos límites evitan solapamientos y facilitan la operación.

ComponenteSí es responsable de…No es responsable de…
listmonkDecidir a quién enviar, estado de campaña y registro del click.Entregar correo directamente a Internet.
Amazon SESTransportar el mensaje y generar feedback de entrega.Administrar listas ni campañas.
Amazon SNSTransportar eventos de bounce y complaint.Decidir el registro o la blocklist (eso lo hace listmonk).
FastAPIRegistrar el interés confirmado en la landing.Registrar el click del email (eso lo hace listmonk).
CloudflareProteger y enrutar los hostnames públicos.Almacenar datos de negocio.
PostgreSQLPersistir configuración, clicks, bounces e interés.Tomar decisiones de enrutamiento o entrega.

Buenas prácticas

  • Mantener la separación de planos: no mover a la landing la lógica de blocklist ni al backend el registro del click.
  • Publicar los servicios privados únicamente a través de Cloudflare Tunnel en producción, nunca exponiendo puertos.
  • Tratar a PostgreSQL como única fuente de verdad de negocio y respaldarlo de forma cifrada.

Consideraciones

Cuotas y sandbox de SES

La salida del sandbox y las cuotas de Amazon SES se administran por región y condicionan el volumen de envío. Es un límite a vigilar antes de escalar campañas.