Entrada del blog
Cómo construí una plataforma CMS multi-tenant usando Payload CMS 3 embebido en Next.js 15 — aislamiento de inquilinos, dominios personalizados, presets de tema y un sistema de diseño cyberpunk, todo corriendo en un solo servidor ARM.
Un proceso. Un despliegue. Múltiples sitios web. Esta plataforma sirve sitios de portafolio, blogs, obras literarias y páginas de negocio desde una sola base de código. Cada inquilino obtiene contenido aislado, dominios personalizados y temas independientes.
Este artículo cubre las decisiones de arquitectura, las funcionalidades que recibe cada inquilino y las lecciones que costaron horas reales aprender.
Payload CMS 3 corre dentro de Next.js 15 — no al lado, dentro del mismo proceso Node.js. Cuando una página necesita datos, llama al CMS directamente. Sin viajes HTTP de ida y vuelta, sin overhead de serialización, sin backend separado que desplegar y mantener. Esta única decisión eliminó un API gateway, un pipeline de deploy separado y unos 200ms de latencia de cada renderizado de página.
El stack: React 19 con Server Components por defecto, Tailwind CSS con una paleta neón cyberpunk, Lexical para rich text con renderizado personalizado, y Docker Compose para producción (proxy reverso, app, base de datos, analíticas, backups — cinco contenedores en total).
Cada inquilino está completamente aislado — contenido, configuración, medios, analíticas. Desde la perspectiva del usuario, cada sitio es independiente. Por debajo, una sola base de código los maneja a todos.
SSL automáticovariables CSSUmami auto-hospedado — sin rastreo de tercerosLos editores de contenido escriben en un editor visual de rich text — encabezados, negritas, listas, imágenes, bloques de código, embeds de video, cajas de callout. Sin sintaxis Markdown que aprender. La capa de renderizado aplica automáticamente mejoras tipográficas: letras capitulares en párrafos de apertura, subrayados con gradiente en encabezados de sección, marcadores de lista con color de acento, código con resaltado de sintaxis y botón de copiar, y lightboxes responsivos para imágenes.
El objetivo era simple: un usuario escribe un encabezado y un párrafo, y ya se ve pulido. Sin clases CSS personalizadas, sin markup especial. La estructura del contenido en sí misma guía el tratamiento visual.
El panel de administración está personalizado para coincidir con el sistema de diseño cyberpunk — dashboard con marca, widgets de estado de contenido, y un asistente de onboarding que guía a los nuevos propietarios de sitios a través de la configuración en cuatro pasos. Los super-administradores ven dashboards de uso por inquilino: cantidad de contenido, uso de medios, dominios activos.
El patrón de CMS embebido es la mejor decisión arquitectónica de este proyecto. Sin API separada, sin sincronización de autenticación, sin dolores de cabeza con CORS. Pero tiene un costo: cada funcionalidad que construyas debe ser consciente del tenant desde el inicio. Agregar multi-tenancy después del hecho significa tocar cada función de obtención de datos, cada regla de control de acceso, cada hook.
Otras lecciones que costaron horas:
La plataforma está en producción, sirviendo contenido real. 13 colecciones de contenido, más de 560 unit tests, soporte bilingüe, siete plantillas de tipo de sitio, y un pipeline de deploy que cabe en un Makefile. Maneja todo, desde artículos de blog hasta generación de CV en PDF y respuestas de API headless.
Si quieres control total sobre tu stack de contenido — el CMS, el panel de admin, el deploy, las analíticas — el patrón de CMS embebido con multi-tenancy es un camino que vale la pena explorar. No el único. Pero uno que funciona en producción, hoy, en un servidor ARM de 10 euros.