Communitygithub.com

PyModel/Astro

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

¿Qué es Astro?

Esta habilidad está diseñada para desarrolladores que utilizan Astro 6.x para crear sitios web rápidos y orientados al contenido, aprovechando la arquitectura de islas. Proporciona orientación experta sobre cuándo y cómo usar la hidratación selectiva (client:* directives), islas de servidor (server:defer), la API de Capas de Contenido con cargadores (glob, file, live loaders), y los modos de salida static vs server, incluyendo la desmentida del modo 'hybrid' y la estrategia correcta para combinar rutas prerenderizadas con rutas bajo demanda. La habilidad también cubre configuraciones avanzadas como variables de entorno type-safe con astro:env, enrutamiento i18n, gestión de sesiones del lado del servidor, transiciones de vista, integración con frameworks de UI (React, Vue, Svelte, Solid), y las nuevas características estables de Astro 6 como la API de Fuentes, la Política de Seguridad de Contenido (CSP) y las colecciones de contenido en vivo. Es compatible con la línea de comandos de Astro, Claude Code y otras herramientas de agente de IA, y sigue las mejores prácticas de la documentación oficial de Astro para evitar errores comunes de hidratación y selección de modo de salida.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/PyModel/Astro/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

Astro preview

Documentación

Especialista en el Framework Astro

Especialista senior en Astro con profunda experiencia en arquitectura de islas, sitios web centrados en 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 enfocados en contenido utilizando la arquitectura de islas de Astro, colecciones de contenido y renderizado híbrido. Entiendes cuándo enviar JavaScript y cuándo mantener las cosas estáticas.

Cuándo Usar Esta Habilidad

Activa esta habilidad cuando:

  • Construyas sitios web centrados en 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 servidor
  • Crear colecciones de contenido con la API de Capas 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 tipo SPA
  • Gestiones sesiones del lado del servidor para estado de usuario
  • Configures variables de entorno type-safe con astro:env
  • Configures enrutamiento i18n para sitios multilingües
  • Integres frameworks de UI (React, Vue, Svelte, Solid)
  • Optimices imágenes y 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 directivas de cliente/servidor adecuadas
  4. Configurar enrutamiento → Establecer enrutamiento basado en archivos, rutas dinámicas, endpoints, i18n
  5. Optimizar entrega → Configurar adaptadores, optimización de imágenes, transiciones de vista, almacenamiento en caché

Marcos de Decisión de Experto

Selección del Modo de Salida

Astro tiene solo dos modos de salida: static (predeterminado) y server. No existe el modo hybrid. El comportamiento antiguo "híbrido" ahora es el predeterminado: permanece en static, agrega un adaptador y opta por rutas individuales para renderizado bajo demanda con export const prerender = false.

output: 'static'  (predeterminado — la elección correcta para casi todos los sitios)
├── Prerenderiza cada página a HTML en tiempo de compilación
├── Blog, documentación, landing, portafolios, marketing, catálogos de comercio electrónico
├── ¿Necesitas algunas rutas en tiempo de solicitud (login, dashboard, API, carrito/checkout)?
│   └── Agrega un adaptador + `export const prerender = false` solo en esas rutas
└── Usa islas de servidor (`server:defer`) para fragmentos personalizados, de modo que la
    página circundante permanezca estática y almacenable en caché

output: 'server'  (solo cuando la MAYORÍA de las páginas necesitan datos de solicitud)
├── Cada página se renderiza bajo demanda; se excluye por ruta con
│   `export const prerender = true`
├── SaaS/dashboard completo tras autenticación, aplicaciones mayormente dinámicas
└── Advertencia: las páginas no prerenderizadas pierden HTML estático / almacenamiento en caché CDN

Señales de que elegiste mal:

  • Compilaciones lentas/enormes con getStaticPaths → permanece en static; mueve las rutas pesadas/dinámicas a prerender = false
  • En modo server pero usando prerender = true en >50 % de las páginas → vuelve a static (el predeterminado)
  • Toda la aplicación está en server pero solo 2 páginas leen cookies → cambia a static + prerender = false en esas 2

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 >50 KB, considera dividirlo: renderiza el shell estático en Astro, hidrata solo la parte interactiva. O usa client:idle si está debajo del pliegue.
  • Hidratar navbars/footers → Si la única interactividad es un menú de toggle en 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 DB, personalización)
│
├── Sí → server:defer (Isla de Servidor)
│   ├── Avatares de usuario, barras de saludo, contadores de carrito
│   ├── Recomendaciones personalizadas en páginas de producto
│   └── Variantes de pruebas A/B resueltas en el servidor
│
└── No → ¿Necesita interactividad del 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 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/stock (cambia a menudo) + client:load para botón de añadir al carrito (necesita interactividad). Tres estrategias de renderizado en una sola página.

Cuándo NO Usar Astro

Astro sobresale 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á tras autenticación sin contenido público (→ framework SPA)
  • Necesitas React Server Components (→ Next.js)

Colecciones de Contenido — Selección de Cargador

Archivos markdown/MDX locales → cargador glob()
Archivo JSON/YAML único de datos → cargador file()
Datos de 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 >1000 entradas de contenido, usa glob() con retainBody: false si no necesitas el cuerpo markdown sin procesar — reduce significativamente el tamaño del almacén de datos.

Nuevo en Astro 6 (estable)

Estas características pasaron de indicadores experimentales a estables en Astro 6 — úsalas directamente:

  • Política de Seguridad de Contenido — security.csp en astro.config.mjs genera automáticamente hashes para tus scripts/estilos → reference/configuration-reference/#securitycsp
  • API de Fuentes — optimización de fuentes integrada para fuentes autoalojadas y de proveedores, sin cambio de layout → guides/fonts
  • Colecciones de Contenido en Vivo — obtención de contenido en tiempo de solicitud en la capa de contenido mediante defineLiveCollection en src/live.config.ts → guides/content-collections

Astro 6 también requiere Node 22+ (Node 18 y 20 descartados) y agrupa Zod 4 a través de astro/zod (astro:schema y z de astro:content están obsoletos).

Documentación de Referencia

Carga orientación 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 Capas 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 type-safe
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 Capas de Contenido)
  • rules/astro-routing.rule.md → Patrones de enrutamiento y rutas dinámicas
  • rules/astro-ssr.rule.md → Configuración 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

DEBE HACER

  • Usar arquitectura de islas — hidratar solo componentes interactivos
  • Elegir directivas de cliente adecuadas según las necesidades de interacción
  • Usar server:defer para contenido personalizado/dinámico en páginas estáticas
  • Definir esquemas de colecciones de contenido con Zod para seguridad de tipos
  • Usar la API de Capas de Contenido con cargadores (glob, file) en src/content.config.ts
  • Importar Zod desde astro/zod y renderizar desde astro:content
  • Usar <Image /> y <Picture /> para imágenes optimizadas
  • Implementar límites de error adecuados para componentes de cliente
  • Usar TypeScript con modo estricto para seguridad de tipos
  • Configurar el adaptador apropiado para el objetivo de despliegue
  • Usar Astro.props para pasar datos a componentes
  • Usar el esquema astro:env para variables de entorno type-safe
  • Usar Astro.session para la gestión de estado del lado del servidor

NO DEBE HACER

  • Hidratar componentes que no necesitan interactividad (usar client: solo cuando sea necesario)
  • Usar client:only sin especificar el framework
  • Importar imágenes con rutas de cadena (usar sentencias de importación)
  • Omitir la validación de esquemas en colecciones de contenido
  • Usar output: 'hybrid' — no es un modo válido; usar static (predeterminado) con prerender = false por ruta, o server con prerender = true
  • Acceder a Astro.request en páginas prerenderizadas
  • Usar APIs del navegador en el frontmatter de componentes (código del lado del servidor)
  • Olvidar instalar adaptadores para despliegue SSR
  • Pasar funciones como props a componentes server:defer (no serializable)
  • Acceder a Astro.session en páginas prerenderizadas (requiere renderizado bajo demanda)
  • Usar src/content/config.ts para nuevos proyectos (usar src/content.config.ts con cargadores)

Referencia Rápida

Estructura del 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>Count: {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 diferido en servidor (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 coincida la media query
  7. client:only → Omitir SSR, renderizar solo en el cliente

Esquema de Colección de Contenido

// 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 funciones 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 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 6.x (Node 22+), Arquitectura de Islas, API de Capas de Contenido (cargadores glob/file, colecciones de contenido en vivo), Esquemas Zod 4 (astro/zod), API de Transiciones de Vista, Islas de Servidor (server:defer), Sesiones, Acciones, Middleware, astro:env (variables de entorno type-safe), Política de Seguridad de Contenido (security.csp), API de Fuentes, 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