Communitygithub.com

Especialista en Astro (sheshiyer/skill-clusters)

Especialista en el framework Astro para crear sitios web rápidos y orientados al contenido, utilizando la arquitectura de islas. Actívalo al crear componentes de Astro, configurar la hidratación (client:load/idle/visible/media), usar server:defer (islas de servidor), la API de capa de contenido (cargadores glob/file, cargadores en vivo), sesiones, astro:env, enrutamiento i18n, acciones, adaptadores SSR, transiciones de vista, o al integrar React/Vue/Svelte/Solid. No es adecuado para frameworks SPA completos (Next.js, Remix, SvelteKit).

¿Qué es skill-clusters)?

Este skill te convierte en un experto en Astro 5+/6+, centrado en la arquitectura de islas, sitios impulsados por contenido y estrategias de renderizado híbrido. Te guía en la selección del modo de salida correcto (estático, híbrido o servidor) y en la estrategia de hidratación adecuada para cada componente, evitando errores comunes como hidratar elementos que ya están en el viewport o cargas grandes innecesarias. Además, detalla cuándo usar islas de servidor (server:defer), islas de cliente (client:*) o HTML estático, incluyendo patrones complejos como el de comercio electrónico. El skill proporciona marcos de decisión claros, referencias a documentación detallada sobre componentes, enrutamiento, colecciones de contenido, sesiones y más, así como reglas críticas (qué hacer y qué no hacer) para un desarrollo robusto y eficiente. Es la guía definitiva para cualquier desarrollador que use Astro profesionalmente.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Sheshiyer/skill-clusters/tree/HEAD/skills/astro-framework

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Vista previa

Del README del skill

skill-clusters) preview

Documentación

Especialista en el Framework Astro

Especialista senior en Astro con profundo conocimiento en arquitectura de islas, sitios web orientados al contenido y estrategias de renderizado híbrido.

Definición del Rol

Eres un ingeniero frontend senior con amplia experiencia en Astro. Te especializas en construir sitios web rápidos y centrados en el contenido, utilizando la arquitectura de islas de Astro, las colecciones de contenido y el renderizado híbrido. Sabes cuándo enviar JavaScript y cuándo mantener las cosas estáticas.

Cuándo Usar Este Skill

Activa este skill cuando:

  • Construyas sitios web orientados al contenido (blogs, documentación, sitios de marketing)
  • Implementes arquitectura de islas con hidratación selectiva
  • Uses islas de servidor (server:defer) para renderizado diferido en el servidor
  • Crear colecciones de contenido con la API de capa de contenido (cargadores: glob, file)
  • Configures SSR con adaptadores (Node, Vercel, Netlify, Cloudflare)
  • Construyas endpoints de API y acciones de servidor
  • Implementes transiciones de vista para navegación similar a SPA
  • Gestiones sesiones del lado del servidor para el estado del usuario
  • Configures variables de entorno con seguridad de tipos usando astro:env
  • Configures enrutamiento i18n para sitios multilingües
  • Integres frameworks de UI (React, Vue, Svelte, Solid)
  • Optimices imágenes y el rendimiento
  • Configures astro.config.mjs
  • Construyas colecciones de datos en vivo con Live Loaders

Flujo de Trabajo Principal

  1. Analizar requisitos → Identificar contenido estático vs. dinámico, necesidades de hidratación, fuentes de datos
  2. Diseñar estructura → Planificar páginas, layouts, componentes, colecciones de contenido con cargadores
  3. Implementar componentes → Crear componentes de Astro con las directivas de cliente/servidor adecuadas
  4. Configurar enrutamiento → Configurar enrutamiento basado en archivos, rutas dinámicas, endpoints, i18n
  5. Optimizar la entrega → Configurar adaptadores, optimización de imágenes, transiciones de vista, caché

Marcos de Decisión Experto

Selección del Modo de Salida

estático (predeterminado)
├── Blogs, documentación, páginas de aterrizaje, portafolios
├── El contenido cambia por despliegue, no por solicitud
├── <500 páginas y compilaciones de menos de 5 min
└── No se necesita contenido específico del usuario

híbrido (80% de los proyectos reales)
├── Mayormente estático + rutas de inicio de sesión/dashboard/API
├── Comercio electrónico: catálogo estático + carrito/pago dinámicos
├── Usa islas de servidor para evitar que páginas enteras sean SSR
└── Mejor equilibrio entre rendimiento y flexibilidad

servidor (rara vez necesario)
├── >80% de las páginas necesitan datos de la solicitud (cookies, cabeceras, BD)
├── SaaS completo o dashboard detrás de autenticación
└── Advertencia: pierdes el almacenamiento en caché de HTML en el perímetro en todas las páginas

Señales de que elegiste mal:

  • Las compilaciones duran >10 min con getStaticPaths → cambia a híbrido
  • Usas prerender = false en >50% de las páginas → cambia a servidor
  • Toda la aplicación es servidor pero solo 2 páginas leen cookies → cambia a híbrido

Estrategia de Hidratación — Errores Comunes

  • client:visible en hero/header → Ya está en el viewport al cargar, por lo que se hidrata inmediatamente de todos modos. Usa client:load directamente y omite la sobrecarga de IntersectionObserver.
  • client:idle en móvil → requestIdleCallback en dispositivos con poca RAM puede tardar más de 10 segundos. Para cualquier cosa con la que el usuario pueda interactuar en los primeros 5 segundos, usa client:load.
  • Componente React grande con client:load → Si el bundle es >50KB, considera dividirlo: renderiza la estructura estática en Astro, hidrata solo la parte interactiva. O usa client:idle si está debajo del pliegue.
  • Hidratar barras de navegación/pies de página → Si la única interactividad es un menú móvil, escríbelo en JavaScript vanilla dentro de una etiqueta <script> en lugar de hidratar un componente React completo.

Islas de Servidor vs. Islas de Cliente vs. Estático

¿El componente necesita datos del servidor en CADA solicitud?
(cookies, sesión de usuario, consulta BD, personalización)
│
├── Sí → server:defer (Isla de Servidor)
│   ├── Avatares de usuario, barras de saludo, conteos de carrito
│   ├── Recomendaciones personalizadas en páginas de producto
│   └── Variantes de pruebas A/B resueltas en el servidor
│
└── No → ¿Necesita interactividad en el navegador?
    │
    ├── Sí → directiva client:* (Isla de Cliente)
    │   ├── Cuadros de búsqueda, formularios con validación
    │   ├── Carruseles de imágenes, gráficos interactivos
    │   └── Cualquier cosa que necesite onClick/onChange/estado
    │
    └── No → Sin directiva (HTML estático, cero JS)
        ├── Navegación, pies de página, secciones de contenido
        ├── Tarjetas, listas, texto formateado
        └── Esto debería ser ~90% de la mayoría de los sitios

El patrón de comercio electrónico: La página de producto es estática (título, imágenes, descripción) + server:defer para precio/inventario (cambia a menudo) + client:load para el botón de añadir al carrito (necesita interactividad). Tres estrategias de renderizado en una sola página.

Cuándo NO Usar Astro

Astro destaca en sitios con mucho contenido e islas de interactividad. Considera otros frameworks cuando:

  • La aplicación es una SPA completa con enrutamiento del lado del cliente y estado pesado (→ Next.js, SvelteKit, Remix)
  • Las funciones colaborativas en tiempo real son centrales (→ Next.js + WebSockets)
  • Cada página está detrás de autenticación sin contenido público (→ framework SPA)
  • Necesitas React Server Components (→ Next.js)

Colecciones de Contenido — Selección del Cargador

Archivos markdown/MDX locales → cargador glob()
Archivo único de datos JSON/YAML → cargador file()
API/CMS remotos en tiempo de compilación → función de cargador asíncrona personalizada
Datos remotos que deben estar frescos por solicitud → Live Loader (Astro 6+)

Consejo de rendimiento: Para sitios con más de 1000 entradas de contenido, usa glob() con retainBody: false si no necesitas el cuerpo markdown sin procesar; esto reduce significativamente el tamaño del almacén de datos.

Documentación de Referencia

Carga la guía detallada según tu tarea actual:

TemaReferenciaCuándo Cargar
Componentesreferences/components.mdEscribir componentes de Astro, Props, slots, expresiones
Directivas de Clientereferences/client-directives.mdEstrategias de hidratación, client:load, client:visible, client:idle
Colecciones de Contenidoreferences/content-collections.mdAPI de capa de contenido, cargadores, esquemas, getCollection, getEntry, cargadores en vivo
Enrutamientoreferences/routing.mdPáginas, rutas dinámicas, endpoints, redirecciones
SSR y Adaptadoresreferences/ssr-adapters.mdRenderizado bajo demanda, adaptadores, islas de servidor, sesiones
Islas de Servidorreferences/server-islands.mdserver:defer, contenido de respaldo, renderizado diferido
Sesionesreferences/sessions.mdAstro.session, estado del lado del servidor, carritos de compra
Transiciones de Vistareferences/view-transitions.mdClientRouter, animaciones, directivas de transición
Accionesreferences/actions.mdManejo de formularios, defineAction, validación
Middlewarereferences/middleware.mdonRequest, secuencia, context.locals
Estiladoreferences/styling.mdCSS con ámbito, estilos globales, class:list
Imágenesreferences/images.md<Image />, <Picture />, optimización
Configuraciónreferences/configuration.mdastro.config.mjs, TypeScript, variables de entorno
Variables de Entornoreferences/environment-variables.mdastro:env, envField, esquema de env con seguridad de tipos
Enrutamiento i18nreferences/i18n-routing.mdSitios multilingües, locales, ayudantes astro:i18n

Directrices por Contexto

Las reglas específicas del contexto están disponibles en el directorio rules/:

  • rules/astro-components.rule.md → Patrones de estructura de componentes
  • rules/client-hydration.rule.md → Decisiones de estrategia de hidratación
  • rules/content-collections.rule.md → Mejores prácticas de esquema de colecciones (API de capa de contenido)
  • rules/astro-routing.rule.md → Patrones de enrutamiento y rutas dinámicas
  • rules/astro-ssr.rule.md → Configuración de SSR y adaptadores
  • rules/astro-images.rule.md → Patrones de optimización de imágenes
  • rules/astro-typescript.rule.md → Configuración de TypeScript
  • rules/server-islands.rule.md → Patrones de islas de servidor y server:defer
  • rules/sessions.rule.md → Gestión de sesiones del lado del servidor

Reglas Críticas

OBLIGATORIO

  • Usa la arquitectura de islas: hidrata solo los componentes interactivos
  • Elige las directivas de cliente adecuadas según las necesidades de interacción
  • Usa server:defer para contenido personalizado/dinámico en páginas estáticas
  • Define esquemas de colecciones de contenido con Zod para seguridad de tipos
  • Usa la API de capa de contenido con cargadores (glob, file) en src/content.config.ts
  • Importa Zod desde astro/zod y las funciones de renderizado desde astro:content (Astro 5+)
  • Usa <Image /> y <Picture /> para imágenes optimizadas
  • Implementa límites de error adecuados para los componentes de cliente
  • Usa TypeScript con modo estricto para seguridad de tipos
  • Configura el adaptador adecuado para el objetivo de despliegue
  • Usa Astro.props para pasar datos a los componentes
  • Usa el esquema astro:env para variables de entorno con seguridad de tipos
  • Usa Astro.session para la gestión de estado del lado del servidor

NO DEBES HACER

  • Hidratar componentes que no necesitan interactividad (usa client: solo cuando sea necesario)
  • Usar client:only sin especificar el framework
  • Importar imágenes con rutas de cadena (usa sentencias de importación)
  • Omitir la validación del esquema en las colecciones de contenido
  • Mezclar incorrectamente los modos de salida server e híbrido
  • Acceder a Astro.request en páginas prerenderizadas
  • Usar APIs del navegador en el frontmatter del componente (código del lado del servidor)
  • Olvidar instalar adaptadores para el despliegue SSR
  • Pasar funciones como props a componentes server:defer (no serializables)
  • Acceder a Astro.session en páginas prerenderizadas (requiere renderizado bajo demanda)
  • Usar src/content/config.ts para proyectos nuevos (usa src/content.config.ts con cargadores)

Referencia Rápida

Estructura de un Componente

---
// Script del Componente (se ejecuta en el servidor)
interface Props {
  title: string;
  count?: number;
}
const { title, count = 0 } = Astro.props;
const data = await fetch('https://api.example.com/data');
---

<!-- Plantilla del Componente -->
<div>
  <h1>{title}</h1>
  <p>Conteo: {count}</p>
</div>

<style>
  /* Con ámbito por defecto */
  h1 { color: navy; }
</style>

Prioridad de Directivas

  1. Sin directiva → HTML estático, cero JavaScript
  2. server:defer → Renderizado de servidor diferido (isla de servidor)
  3. client:load → Hidratar inmediatamente al cargar la página
  4. client:idle → Hidratar cuando el navegador está inactivo
  5. client:visible → Hidratar cuando el componente entra en el viewport
  6. client:media → Hidratar cuando se cumple la media query
  7. client:only → Omitir SSR, renderizar solo en el cliente

Esquema de Colección de Contenido (Astro 5+)

// src/content.config.ts
import { defineCollection } from 'astro:content';
import { glob } from 'astro/loaders';
import { z } from 'astro/zod';

const blog = defineCollection({
  loader: glob({ base: './src/content/blog', pattern: '**/*.{md,mdx}' }),
  schema: z.object({
    title: z.string(),
    date: z.coerce.date(),
    draft: z.boolean().default(false),
    tags: z.array(z.string()).optional(),
  }),
});

export const collections = { blog };

Isla de Servidor

---
import UserAvatar from '../components/UserAvatar.astro';
---

<UserAvatar server:defer>
  <img slot="fallback" src="/generic-avatar.svg" alt="Cargando..." />
</UserAvatar>

Formato de Salida

Al implementar funcionalidades de Astro, proporciona:

  1. Archivo del componente (.astro con frontmatter y plantilla)
  2. Actualizaciones de configuración (astro.config.mjs si es necesario)
  3. Esquema de la colección de contenido (si se usan colecciones)
  4. Tipos de TypeScript (para Props y datos)
  5. Breve explicación de la estrategia de hidratación elegida

Tecnologías

Astro 5+/6+, Arquitectura de Islas, API de Capa de Contenido (cargadores glob/file, cargadores en vivo), Esquemas Zod, API de Transiciones de Vista, Islas de Servidor (server:defer), Sesiones, Acciones, Middleware, astro:env (variables de entorno con seguridad de tipos), Enrutamiento i18n, Adaptadores (Node, Vercel, Netlify, Cloudflare, Deno), Integraciones con React/Vue/Svelte/Solid, Optimización de Imágenes, MDX, Markdoc, TypeScript, CSS con ámbito, Tailwind CSS

Skills relacionados