Durante casi once años, mi reflejo ante cualquier cosa que necesitara un backend fue escribir uno. No porque fuera siempre la decisión correcta, sino porque construir es la parte que disfruto y era lo bastante bueno como para permitirme el hábito. Durante mucho tiempo ese hábito fue un impuesto que le pagaba a mi propio ego, y me decía a mí mismo que era artesanía. A principios de 2025 por fin dejé de pagarlo, al menos en un proyecto.
Mi portafolio siempre ha sido algo de lo que estoy orgulloso, pero sus cimientos se habían convertido en una cápsula del tiempo. Durante años, un pequeño backend en PHP leía datos de archivos INI; más tarde, el frontend simplemente leía JSON en crudo directamente del disco. La presentación estaba pulida y el flujo de trabajo era miserable. Cada errata, cada actualización de un proyecto, significaba abrir un editor, cambiar un archivo, hacer un commit. Recuerdo querer corregir una sola frase desde el móvil, lejos del escritorio, y darme cuenta de que no podía hacerlo sin un despliegue completo. Ese fue el momento en que el hábito dejó de sentirse como artesanía y empezó a sentirse como una jaula que yo mismo había construido.
No quería construir a mano una interfaz de administración desde cero —hasta yo podía oír el ego en esa idea—, así que me puse a mirar lo que ya existía. La búsqueda me devolvió al CMS headless: el frontend completamente separado del almacén de contenido, los datos servidos a cualquier sitio por una API. Ya había trabajado con esta forma a escala empresarial, pero no me había mantenido al día de lo mucho que habían avanzado las herramientas independientes.
Los gigantes SaaS —Contentful y sus vecinos— son de verdad capaces, y también cobran por registro, con topes de API que se leen como una cuenta atrás para cualquier cosa que crezca. No quería una factura de suscripción que me penalizara por usar mi propio sitio. Quería ser dueño del código y de la base de datos sin más.
Así que miré solo cosas que pudiera alojar yo mismo, y audité las que la gente usa de verdad:
Strapi se situaba en el espacio entre una aplicación terminada y un framework. La interfaz es lo bastante buena como para hacer un cambio desde el móvil, y nunca cierra la puerta al código: corre sobre Node, así que un hook de ciclo de vida o un controlador a medida están ahí cuando un CMS estándar me dejaría bloqueado. Trataba los seis idiomas como objetos de primera clase en lugar de una ocurrencia tardía, me dejaba dar forma a los esquemas sin escribirlos a mano, y convertía un artículo en algo modular: bloques que podía apilar en vez de un bloque único de marcado.
Cuando empecé este blog unos meses después, no volví a empezar de cero. Extendí los modelos que ya tenía y apunté un segundo frontend hacia ellos. El lector de archivos estáticos se había convertido en un motor que servía a dos proyectos.
Nada de esto fue una historia de conversión. Sigo recurriendo a una construcción desde cero más a menudo de lo que debería, y sigo pensando que ese instinto vale la pena tenerlo. Pero pertenece a los proyectos donde equivocarme solo me cuesta a mí, no a la única pieza de infraestructura que necesita ser aburrida y fiable. Elegir la herramienta aquí era la decisión más difícil, y por una vez la tomé.
Los cimientos están puestos; ahora toca construir.