Lecciones aprendidas al actualizar mi blog
¡Astro, Tailwind, MDX, Pagefind y más!
Recientemente, me embarqué en una travesía para actualizar mi sitio Gatsby v1 de más de 8 años.
Esta publicación compartirá algunas lecciones que aprendí durante el proceso y las tecnologías divertidas que exploré.
Tabla de contenidos
- Requisitos del proyecto
- Eligiendo la pila tecnológica adecuada
- Astro: Curva de aprendizaje y características clave
- CSS moderno: Wow
- Búsqueda: Pagefind
- Comentarios: Utterances
- Tailwind: Lamentos
- Conclusión
Requisitos del proyecto
Antes de sumergirme en la actualización, definí un conjunto de requisitos:
Dado que mi blog recibe un número de visitas diario muy variable, consideré que un sitio estáticamente pre‑generado ofrecería el rendimiento que buscaba sin añadir complejidad extra.
Además, necesitaba conservar el contenido y las funcionalidades existentes del sitio, incluyendo:
- Resaltado de código
- Comentarios
- Búsqueda en el sitio
- Componentes React preexistentes: UI de cuestionario, incrustaciones de Gist
- Formulario de contacto
- Imágenes responsivas
- Tiempo de carga inferior a 1 segundo
- Compatibilidad con navegadores: 2018+
- Despliegues automatizados y basados en pull‑requests
Eligiendo la pila tecnológica adecuada
A lo largo de los años he trabajado con muchas herramientas de sitios estáticos, desde Jekyll, Hugo, Slate y Gatsby. Así como con numerosos frameworks front‑end: Ember, Knockout, Angular, Vue y, por supuesto, React.
Así que, tengo literalmente demasiadas opciones, que finalmente reduje a Remix, Next.js y Astro,
Podría escribir una serie completa de blogs sobre mi proceso de evaluación, pero lo resumiré aquí:
Elegí Astro porque me permite hacer cosas significativas rápidamente.
Su diseño de API es refrescantemente simple. Es un gran equilibrio entre flexibilidad y buenas opiniones de diseño.
Resultó tranquilizador que Astro no tenga una inclinación evidente hacia la nube ni una agenda de framework.
Astro no fue la única tecnología que utilicé, aquí tienes un desglose completo de la pila:
- Astro: Un generador de sitios estáticos moderno.
- ShadcnUI: Una colección de componentes reutilizables.
- Tailwind CSS: Un framework CSS orientado a utilidades.
- MDX: Contenido Markdown + componentes en línea.
- Pagefind: Biblioteca de búsqueda rápida, estática y offline. ¡No necesitas Algolia!
- Utterances: Sistema de comentarios basado en issues de GitHub.
- Netlify: Despliegues automatizados, formulario de contacto con captcha.
Astro: Curva de aprendizaje y características clave
Astro se convirtió rápidamente en la piedra angular de mi actualización.
Aquí tienes algunas características clave que encontré particularmente útiles:
- archivos
.astro: A primera vista, los componentes de Astro pueden parecerse a los componentes JSX de React, sin embargo son bastante diferentes y persiguen un conjunto distinto de objetivos. (Ver tabla comparativa a continuación.) - Impulsado por sus propias herramientas de compilación en Golang y Vite: simplemente funciona. Maneja sin problemas ESM/CJS, TypeScript, empaquetado de código, estilos, imágenes, etc.
- Sin sesgo de framework o sesgo de nube. (Tos Next.js, OpenNext)
- Renderizado estático vs. híbrido: Astro brinda flexibilidad para apuntar a la mayoría de plataformas en la nube: AWS, GCP, Firebase, Netlify, Vercel, Cloudflare Pages, Azure, Fly.io y muchas más.
- Colecciones de contenido: La API
getCollectionsimplifica el trabajo con archivos de contenido como fuente de datos. - Enrutamiento basado en archivos: El sistema de enrutamiento basado en archivos de Astro, combinado con
getStaticPaths, hace que generar páginas sea pan comido. - SEO: Astro no se interpone en tu camino, y solo emite una cantidad mínima de
detritoscódigo boilerplate (astro-island) cuando es necesario.
Algunas cosas resultaron un poco inesperadas, como el estilo alrededor del marcado inyectado por Astro y el efecto de display:contents.
<style>astro-island,astro-slot,astro-static-slot{display:contents}</style>Comparando .astro vs. Componentes Cliente
Los componentes de Astro son básicamente plantillas HTML con un potente patrón de componentes y props. Pueden obtener datos en tiempo de compilación, acceder a recursos de backend y mantener cierta información sensible oculta.
La mejor manera de entender los componentes .astro de Astro es compararlos y contrastarlos con los componentes del lado del cliente (React, Vue, Svelte, etc.).
| ¿Qué necesitas hacer? | Componente .astro | Componente Cliente |
|---|---|---|
| Generar HTML con patrón potente de plantilla+componente | ✅ | ❌ |
| Obtener datos en tiempo de compilación | ✅ | ❌ |
| Acceder a recursos de backend (directamente) | ✅ | ❌ |
| Mantener información sensible oculta (tokens de acceso, claves API, etc.) | ✅ | ❌ |
| Reducir JavaScript del lado del cliente | ✅ | ❌ |
| Usar componentes cliente (React, Vue, Svelte, etc.) | ✅ | ✅ |
Añadir interactividad y escuchas de eventos (onClick(), onChange(), etc.) | ❌ | ✅ |
Usar Estado y Efectos de Ciclo de Vida (useState(), useReducer(), useEffect(), etc.) | ❌ | ✅ |
| Usar APIs solo del navegador | ❌ | ✅ |
| Usar hooks personalizados que dependan de estado, efectos o APIs solo del navegador | ❌ | ✅ |
CSS Moderno: ¡Guau!
Volviendo al desarrollo frontend, me entusiasmaron los avances en CSS nativo:
- Variables CSS: Disponibles desde hace tiempo y bastante estables en los navegadores desde 202*.
- Anidamiento: Finalmente en la especificación y sin la sintaxis torpe de versiones anteriores. Ahora se parece a Less o SCSS.
- Nuevos selectores:
:is(),:where()y:has()permiten una focalización más precisa de los elementos. - Unidades modernas como
ch,vwy funciones comoclamp()ofrecen mejor control sobre diseños y tipografía. - Establece espaciado de forma más natural con los atributos
-inliney-block. Define padding o margin en el eje horizontal o vertical. En lugar demargin: 0 1rem 0 1rem→margin-inline: 1rem. - Layouts avanzados: Re‑aprendiendo CSS Grid. Vaya, hay mucho material allí. Puede resultar abrumador con la aparente infinidad de formas de usarlo. Ten en cuenta que basta con dominar una o dos maneras. Consulta estos recursos que me ayudaron a hacer trucos con grid: Video de Kevin Powell: Aprende CSS Grid de forma fácil, Responsive sin media queries, Diez diseños modernos en una línea de CSS.
Búsqueda: Pagefind
Implementar una búsqueda en el sitio sin servicios de terceros ni alojamiento de bases de datos parecía un reto divertido. Después de todo, no es como si tuviera 10 000 publicaciones que indexar (todavía).
Mientras exploraba las integraciones de la comunidad de Astro me topé con una herramienta fantástica que desearía haber conocido antes: Pagefind.
Pocas herramientas resuelven un problema tan bien como Pagefind resuelve la búsqueda local en un sitio.
La simplicidad de implementar Pagefind es un placer. Puede integrarse con CUALQUIER contenido estático, y puedes decidir si usar una UI predeterminada o construir algo totalmente personalizado.
Resolvió de manera limpia todo lo que necesitaba. Sólo tomó minutos integrarlo, y la mayor parte del trabajo consistió en añadir una etiqueta <div id="search"></div> y algo de estilo.
Comentarios: Utterances
Desafortunadamente, tuve que despedirme de Disqus y de los comentarios que había acumulado durante muchos años.
Quería tener un mayor control y visibilidad sobre los scripts de terceros que se ejecutan en mi sitio.
Además, necesitaba que fuera algo simple y fácil de mantener.
Esto me llevó a elegir el fantástico servicio Utterances. Su sistema de comentarios basado en GitHub (issues) encaja bien con mi audiencia. Además, es fácil de configurar y gratuito.
Tailwind: Lamentos
Hay un único componente tecnológico del que cada vez me arrepiento más: Tailwind.
Con el tiempo, percibo la diferencia de coste entre escribir y mantener. Tailwind permite escribir rápidamente, pero una vez que la hoja de estilos se vuelve lo suficientemente compleja, puede resultar tedioso de leer y ampliar.
Conclusión
Actualizar mi antiguo sitio Gatsby v1 a una pila moderna construida alrededor de Astro fue una experiencia divertida. 10/10 lo recomendaría.
Si estás pensando en actualizar un sitio antiguo o en crear uno nuevo estático (o híbrido), recomiendo encarecidamente que le eches un vistazo a Astro. La curva de aprendizaje puede ser pronunciada en algunos momentos, pero los beneficios en términos de rendimiento, experiencia del desarrollador y futuro‑prueba del proyecto valen totalmente el esfuerzo.