Por qué Astro
Astro entrega cero JavaScript por defecto. Tu contenido se renderiza a HTML plano en el servidor, y las islas interactivas solo se hidratan donde tú lo pides. Para un sitio personal cargado de contenido — blog, research, galerías — es exactamente el trato que quieres.
El camino de 45 minutos
npm create astro@latest— elige la plantilla de blog, TypeScript strict.- Define una content collection en
src/content.config.tscon un schema zod. - Escribe tu primer post
.mdx— el frontmatter se valida en tiempo de build. - Añade una página
[slug].astrocongetStaticPaths()+render(). - Despliega:
astro buildproduce undist/totalmente estático que puedes alojar en cualquier parte.
Islands: la parte que la gente pasa por alto
<Hero client:load /> <!-- se hidrata inmediatamente -->
<Chart client:visible /> <!-- se hidrata al hacer scroll hasta él -->
<Comments client:idle /> <!-- se hidrata cuando el navegador está ocioso -->
Usa client:visible para todo lo que esté bajo el fold. Tu puntuación de Lighthouse te lo agradecerá.
Qué sigue
Añade i18n con rutas dinámicas [locale] — esa es otra lección.