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.
Por Qué un CMS Embebido
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).
Qué Recibe Cada Inquilino
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.
- Dominios personalizados con verificación DNS y
SSL automático - Ocho presets de tema — cyberpunk, minimal, editorial, corporate, medical, creative, nature, elegant — más branding personalizado completo vía
variables CSS - Fondos interactivos — tres animaciones basadas en canvas sugeridas por tipo de sitio
- Dos layouts de página principal — una vista de portafolio por defecto con timeline y grilla de proyectos, o un layout orientado a producto con hero, features, testimonios y FAQ
- Analíticas por inquilino vía
Umamiauto-hospedado — sin rastreo de terceros - Contenido bilingüe (EN + ES) con cadenas de fallback por locale y un flujo de traducción masiva
- Secciones activables — servicios, testimonios, miembros del equipo, FAQs se pueden habilitar o deshabilitar por inquilino
Contenido Rico Que Se Ve Bien por Defecto
Los 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.
La Experiencia de Administración
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.
Lecciones Aprendidas
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:
- Los Globals de Payload son singletons — no pueden contener datos por inquilino. Conviértelos a colecciones con scope de tenant temprano, no después de haberlos referenciado en todas partes.
- Las herramientas de schema push son geniales para prototipar. En producción, pueden omitir cambios silenciosamente. Usa migraciones apropiadas una vez que superes la etapa de prototipo.
- Payload usa CSS layers para sus estilos de admin. Si envuelves tus overrides en un layer también, pierden especificidad silenciosamente. Mantén el CSS personalizado del admin sin layers. Perdí un día entero con esto.
- Pon toda la lógica de CI en un Makefile, no en YAML de la plataforma CI. Cambiar de proveedor significa reescribir wrappers de YAML, no la lógica de build. Y puedes ejecutar exactamente las mismas verificaciones localmente.
Estado Actual
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.