Saltar al contenido
Todas las publicaciones

P3

Arquitectura Astro + Go + HTMX

Mi portafolio es estático para quien lo visita y editable desde un panel: Astro genera HTML y una API en Go con un panel HTMX lo actualiza.

¿Estático o CMS?

Cuando armé mi portafolio quería dos cosas que suelen excluirse: que cargue como un sitio estático y que pueda editarlo desde un panel, sin tocar código ni hacer un commit por cada cambio de texto. La solución fue separar el camino de lectura del de escritura.

Esquema de la arquitectura: el panel escribe a través de una API en Go y un build genera el sitio estático que reciben las visitas

Lectura: cada visita recibe un archivo

Astro genera el sitio como HTML estático y el servidor web lo entrega como archivo. En una visita no se ejecuta código de aplicación ni se consulta la base de datos. Lo que se lee mil veces tiene que ser barato, y pocas cosas son más baratas que servir un archivo con caché.

Escritura: un panel con HTMX y una API en Go

El panel habla con una API propia escrita en Go (Gin): un binario sin dependencias de runtime, apoyado en una base de datos embebida, suficiente para un contenido que cabe en pocas tablas.

El panel no es una SPA: está hecho con HTMX. El formulario hace la petición, el servidor responde con el fragmento de HTML ya renderizado y HTMX lo reemplaza en la página (hx-target + hx-swap="outerHTML"). Así no necesito un build de frontend para el panel ni duplico el estado entre cliente y servidor.

Al guardar, un estático nuevo

Cuando guardo un cambio, la API pide un build automático: se genera un sitio estático nuevo y se publica de golpe. Si el build falla, sigue en línea la versión anterior y nadie ve un estado a medias. Ese mecanismo lo conté en despliegues sin caída con un symlink.

Fotograma del video: al guardar, la API dispara un build que reemplaza el HTML publicado por una versión nueva

¿Por qué no SSR o un CMS clásico?

Con renderizado en el servidor o con un CMS tradicional, cada visita pasa por la aplicación. Aquí leer es servir archivos; solo escribir cuesta, y escribo pocas veces.

Comparación del video: SSR, CMS clásico y sitio estático con panel

El intercambio existe: un cambio tarda lo que dura un build en verse publicado, y el contenido que cambia por usuario o en tiempo real no encaja en este modelo. Para un portafolio, vale la pena.

Lo que aprendí

Separar lectura y escritura simplifica casi todo: el camino que se usa a cada rato es trivial, y el complejo se usa poco. Lo que se lee mil veces debe ser barato; lo que se escribe poco puede permitirse un build. Y HTMX me recordó que, para un panel interno, devolver HTML desde el servidor sigue siendo una opción muy productiva.

¿Y tú?

Para paneles internos, ¿vas con una SPA (React, Vue) o con HTMX y HTML desde el servidor?

  • #SoftwareArchitecture
  • #Golang
  • #HTMX
  • #Astro
  • #WebDevelopment

¿Necesitas algo parecido en tu equipo o tu producto?

Cuéntame el contexto y te respondo en menos de 24 horas. Si prefieres revisar la trayectoria antes, el CV está a un clic.