La creación y mantenimiento de un blog personal o técnico ha evolucionado considerablemente con el paso del tiempo. Hoy en día, existen múltiples soluciones que permiten generar contenido web, ya sea a través de frameworks pesados o plataformas estáticas. Sin embargo, algunas de estas opciones no cumplen con ciertas necesidades específicas como ser ligeras, fáciles de mantener y que se adapten a arquitecturas complejas como la de un clúster Raspberry Pi. En este contexto surge la combinación de Go y HTMX para el desarrollo de un blog propio, capaz de ofrecer alto rendimiento, simplicidad y un control total sobre el sistema. La motivación detrás del uso de Go junto con HTMX nace de la necesidad de tener un blog que pueda alojarse en un entorno limitado, como un clúster Kubernetes corriendo en hardware de bajo consumo, con restricciones estrictas de memoria y capacidad de procesamiento.
Go, con su naturaleza compilada, excelente manejo de concurrencia y bajo consumo de recursos, se presenta como una elección natural para construir un servidor HTTP robusto que gestione la renderización del contenido. Por otro lado, HTMX, una librería JavaScript ligera, permite dinamismo en la actualización del HTML sin necesidad de grandes dependencias o frameworks complejos, facilitando el renderizado del lado servidor (SSR) y una experiencia de usuario fluida. Al evaluar inicialmente otras alternativas que soportan Markdown y SSR, frameworks como Docusaurus o SvelteKit vienen a la mente. Sin embargo, Docusaurus depende de React y una pila extensa de dependencias que complican su mantenimiento a largo plazo y elevan el consumo de recursos. SvelteKit y su derivado SveltePress, aunque ofrecen bundles livianos y una experiencia amigable con SSR, imponen una estructura y flujo de trabajo con la que no todos los desarrolladores desean comprometerse, especialmente cuando el objetivo es conservar un control total y simplicidad en el blog.
El enfoque tradicional de utilizar HTML puro para construir un blog, aunque sencillo y rápido de renderizar, se vuelve poco práctico cuando se trata de gestionar contenidos complejos o cuando se quiere mantener la facilidad de escritura con Markdown. Por ello, usar Markdown como formato base para los artículos se ha consolidado como una práctica ideal, permitiendo escribir sin preocuparse por los detalles de marcado HTML y habilitando herramientas para generar páginas web mediante procesos automatizados. Inspirarse en blogs sencillos y efectivos como The Go Blog es una estrategia que potencia un diseño limpio y funcional del sistema. The Go Blog utiliza el propio servidor HTTP de Go para servir páginas que se originan en ficheros Markdown, haciendo que el proceso sea simple y directo. La adaptación de este concepto con la incorporación de capacidades de SSR mediante HTMX ofrece un plus en la velocidad de navegación y una mejor experiencia al usuario.
El motor Hugo, basado en Go, es otro candidato reconocido para generar sitios estáticos. Aunque es rápido y eficiente, su estructura y documentación pueden resultar poco amigables y rígidas para quienes buscan un sistema aún más personalizado y reducido, lo que llevó a descartar esta opción en favor de una construcción propia desde cero. HTMX, por su parte, destaca al abstraer el Javascript necesario para modificar el DOM, permitiendo que el servidor entregue HTML parcial para actualizar secciones de la página sin recargar todo el documento. Este paradigma es beneficioso en blogs donde la latencia y el rendimiento influyen directamente en la experiencia del lector. Además, HTMX funciona muy bien con renderizado del lado servidor, permitiendo la manipulación dinámica del contenido con respuestas simples y sin necesidad de estructuras JSON o APIs complejas.
En cuanto a Go, su simplicidad sintáctica, manejo de concurrencia incorporado y un ecosistema maduro para construir aplicaciones web lo convierten en la herramienta ideal para este proyecto. Go facilita la compilación cruzada para múltiples arquitecturas, adaptándose tanto a ARM64 como AMD64, lo cual es esencial para el despliegue en hardware diverso. La construcción de un servidor HTTP personalizado que sirva las páginas generadas, aprovechando las plantillas nativas y una arquitectura modular, proporciona flexibilidad y mantenimiento a largo plazo. El desarrollo inicia con una prueba de concepto que asegura la compatibilidad y madurez de HTMX dentro del flujo del servidor Go. Por ejemplo, un sistema simple de autenticación con OAuth2 y una interfaz que actualiza elementos en función del estado de sesión valida la robustez de HTMX para escenarios reales.
La conclusión de esta etapa es clara: HTMX es una solución madura, adecuada para producción y eficaz para plugins HTML sin sobrecarga de Javascript. La estructura de directorios y la arquitectura se diseñan inspirándose en SvelteKit y SveltePress. La idea clave es tener un directorio de páginas que contenga los archivos Markdown junto con metadatos en el front matter. A partir de estos archivos se construyen las plantillas HTML usando el motor de plantillas estándar de Go, incorporando componentes reutilizables que permiten organizar el contenido de manera armoniosa. El directorio de recursos estáticos cumple su función habitual, alojando imágenes, iconos y otros activos que no necesitan procesamiento.
Estos se sirven directamente mediante el servidor web, lo que maximiza la eficiencia. En términos de implementación, el servidor multiplica sus funciones distinguiendo entre solicitudes iniciales y solicitudes HTMX. La solicitud inicial carga la página completa junto con el código HTMX y los estilos, mientras que las solicitudes subsecuentes, activadas por interacciones del usuario, solicitan solo el fragmento HTML necesario para actualizar el contenido sin recargar la página entera. Este comportamiento se habilita a través del atributo hx-boost en los enlaces, haciendo que toda la navegación sea fluida e instantánea. Para lograr la renderización de Markdown, se utiliza la biblioteca Goldmark combinada con Chroma para resaltar la sintaxis del código, incluyendo opciones para estilos personalizados y numeración de líneas, lo cual mejora significativamente la legibilidad de los artículos técnicos.
Para garantizar la optimización y rapidez, especialmente por la naturaleza principalmente estática del contenido, se emplea una etapa de precompilación mediante el comando go generate. Este proceso lee los archivos Markdown y genera los correspondientes archivos HTML en un directorio específico, listos para ser servidos. Además, durante esta fase se construye un índice que organiza las entradas del blog, manejando paginación y orden cronológico. El uso de plantillas nombradas por parte de Go optimiza la reutilización de fragmentos HTML, lo que facilita la creación, modificación y mantenimiento del sistema de presentación. A nivel del cliente, con HTMX y habilitando el soporte de cabeza dinámica mediante su extensión, es posible actualizar el título, estilos y otros recursos sin recargar la página completa, manteniendo coherencia en la interfaz y mejorando el rendimiento.
El sistema final ofrece un blog que funciona con mínima memoria y procesamiento, con una navegación rápida y sin recargas completas. La posibilidad de escribir contenido en Markdown permite a los autores concentrarse en la redacción sin preocuparse por la capa de presentación, y la generación previa de páginas da seguridad en el rendimiento. El resultado es un producto comparable a otras soluciones más complejas, pero mucho más personalizable y controlado, al precio de un proceso de configuración mayor y un conocimiento más profundo en aspectos técnicos. Es un esfuerzo que recuerda la filosofía de sistemas especializados y optimizados para necesidades propias, similar a quienes prefieren configuraciones minuciosas de sistemas operativos como Gentoo para lograr el máximo control. En resumen, al combinar las fortalezas de Go y HTMX, es posible construir un blog moderno que sea ligero, rápido, autoalojado y con un mínimo de dependencias.
La inversión en desarrollar un flujo de trabajo propio con un generador estático basado en go generate y un servidor que gestione SSR con HTMX resulta en un sitio web eficiente y completamente bajo control del desarrollador. En el futuro, este enfoque puede ampliarse para incorporar funciones avanzadas ofreciendo una base sólida para cualquier proyecto personal o profesional que requiera difusión ágil y elegante del contenido.