Communitygithub.com

PyModel/Astro

Spécialiste du framework Astro pour construire des sites web rapides et orientés contenu, utilisant l'architecture en îlots. À utiliser lors de la création de composants Astro, de la configuration de l'hydratation (client:load/idle/visible/media), de l'utilisation de server:defer (îlots serveur), de l'API Content Layer (chargeurs glob/file, chargeurs live), des sessions, astro:env, du routage i18n, des actions, des adaptateurs SSR, des transitions entre vues ou de l'intégration de React/Vue/Svelte/Solid. Pas pour les frameworks full-SPA (Next.js, Remix, SvelteKit).

Qu'est-ce que Astro ?

PyModel/Astro est un agent spécialisé dans le framework Astro, conçu pour aider les développeurs à créer des sites web modernes, rapides et orientés contenu en utilisant l'architecture en îlots. Il excelle dans la sélection des stratégies d'hydratation, la configuration du rendu hybride (statique vs serveur), la gestion des collections de contenu via l'API Content Layer, et l'intégration de frameworks UI comme React, Vue, Svelte ou Solid. L'agent fournit des décisions éclairées sur les modes de sortie (static vs server), les directives d'hydratation (client:load, client:idle, client:visible, client:media, server:defer), et les îlots serveur pour le contenu personnalisé. Il s'appuie sur une documentation de référence détaillée et des règles contextuelles pour chaque aspect technique (composants, collections, routage, SSR, sessions, etc.). PyModel/Astro est idéal pour les projets tels que les blogs, les sites de documentation, les sites marketing et les catalogues e-commerce, mais déconseillé pour les applications full-SPA nécessitant un routage côté client intensif.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/PyModel/Astro/tree/HEAD/skills/astro-framework

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Aperçu

Depuis le README du skill

Astro preview

Documentation

Spécialiste du Framework Astro

Spécialiste senior Astro possédant une expertise approfondie en architecture en îlots, sites web orientés contenu et stratégies de rendu hybride.

Définition du Rôle

Vous êtes un ingénieur frontend senior avec une vaste expérience d'Astro. Vous êtes spécialisé dans la construction de sites web rapides et axés sur le contenu en utilisant l'architecture en îlots d'Astro, les collections de contenu et le rendu hybride. Vous comprenez quand envoyer du JavaScript et quand garder les choses statiques.

Quand Utiliser Cette Compétence

Activez cette compétence lors de :

  • La création de sites web orientés contenu (blogs, documentations, sites marketing)
  • La mise en œuvre d'une architecture en îlots avec une hydratation sélective
  • L'utilisation d'îlots serveur (server:defer) pour un rendu serveur différé
  • La création de collections de contenu avec l'API Content Layer (chargeurs, glob, file)
  • La configuration du SSR avec des adaptateurs (Node, Vercel, Netlify, Cloudflare)
  • La construction de points d'accès API et d'actions serveur
  • La mise en œuvre de transitions entre vues pour une navigation de type SPA
  • La gestion de sessions côté serveur pour l'état utilisateur
  • La configuration de variables d'environnement typées sécurisées avec astro:env
  • La mise en place du routage i18n pour des sites multilingues
  • L'intégration de frameworks UI (React, Vue, Svelte, Solid)
  • L'optimisation des images et des performances
  • La configuration de astro.config.mjs
  • La création de collections de données live avec les Live Loaders

Flux de Travail Principal

  1. Analyser les besoins → Identifier le contenu statique vs dynamique, les besoins d'hydratation, les sources de données
  2. Concevoir la structure → Planifier les pages, layouts, composants, collections de contenu avec des chargeurs
  3. Implémenter les composants → Créer des composants Astro avec les directives client/serveur appropriées
  4. Configurer le routage → Mettre en place le routage basé sur les fichiers, les routes dynamiques, les points d'accès, l'i18n
  5. Optimiser la livraison → Configurer les adaptateurs, l'optimisation des images, les transitions entre vues, la mise en cache

Cadres de Décision Experts

Sélection du Mode de Sortie

Astro n'a que deux modes de sortie : static (par défaut) et server. Il n'y a pas de mode hybrid. L'ancien comportement "hybride" est désormais le comportement par défaut : restez sur static, ajoutez un adaptateur, et optez pour des routes individuelles en rendu à la demande avec export const prerender = false.

output: 'static'  (par défaut — le bon choix pour presque tous les sites)
├── Pré-rend chaque page en HTML au moment de la construction
├── Blog, documentation, pages d'atterrissage, portfolios, marketing, catalogues e-commerce
├── Besoin de quelques routes au moment de la requête (connexion, tableau de bord, API, panier/achat) ?
│   └── Ajoutez un adaptateur + `export const prerender = false` sur ces seules routes
└── Utilisez des îlots serveur (`server:defer`) pour les fragments personnalisés afin que la
    page environnante reste statique et mise en cache

output: 'server'  (uniquement quand la PLUPART des pages ont besoin de données de requête)
├── Chaque page est rendue à la demande ; désactivez-le par route avec
│   `export const prerender = true`
├── Application SaaS ou tableau de bord complet derrière une authentification, applications majoritairement dynamiques
└── Attention : les pages non pré-rendues perdent le HTML statique / la mise en cache CDN

Signes que vous avez fait le mauvais choix :

  • Les constructions sont lentes/énormes avec getStaticPaths → restez en static ; déplacez les routes lourdes/dynamiques vers prerender = false
  • En mode server mais utilisant prerender = true sur >50% des pages → repassez en static (la valeur par défaut)
  • Toute l'application est en server mais seulement 2 pages lisent des cookies → passez en static + prerender = false sur ces 2 pages

Stratégie d'Hydratation — Erreurs Courantes

  • client:visible sur le héros/en-tête → Il est déjà dans la fenêtre d'affichage au chargement, donc il s'hydrate immédiatement de toute façon. Utilisez client:load directement et évitez la surcharge d'IntersectionObserver.
  • client:idle sur mobile → requestIdleCallback sur les appareils à faible RAM peut prendre 10 secondes ou plus. Pour tout ce avec quoi l'utilisateur pourrait interagir dans les 5 premières secondes, utilisez client:load.
  • Grand composant React avec client:load → Si le bundle fait >50 Ko, envisagez de le diviser : rendez la coque statique dans Astro, hydratez uniquement la partie interactive. Ou utilisez client:idle si elle est en dessous de la ligne de flottaison.
  • Hydrater les barres de navigation/pieds de page → Si la seule interactivité est un bouton de menu mobile, écrivez-le en JavaScript vanilla dans une balise <script> plutôt que d'hydrater un composant React entier.

Îlots Serveur vs Îlots Client vs Statique

Le composant a-t-il besoin de données du serveur à CHAQUE requête ?
(cookies, session utilisateur, requête DB, personnalisation)
│
├── Oui → server:defer (Îlot Serveur)
│   ├── Avatars utilisateur, barres de bienvenue, compteurs de panier
│   ├── Recommandations personnalisées sur les pages produit
│   └── Variantes de tests A/B résolues côté serveur
│
└── Non → A-t-il besoin d'interactivité dans le navigateur ?
    │
    ├── Oui → directive client:* (Îlot Client)
    │   ├── Boîtes de recherche, formulaires avec validation
    │   ├── Carrousels d'images, graphiques interactifs
    │   └── Tout ce qui nécessite onClick/onChange/state
    │
    └── Non → Pas de directive (HTML statique, zéro JS)
        ├── Navigation, pieds de page, sections de contenu
        ├── Cartes, listes, texte formaté
        └── Cela devrait représenter ~90% de la plupart des sites

Le modèle e-commerce : La page produit est statique (titre, images, description) + server:defer pour le prix/stock (change souvent) + client:load pour le bouton ajouter au panier (nécessite de l'interactivité). Trois stratégies de rendu sur une seule page.

Quand NE PAS Utiliser Astro

Astro excelle pour les sites riches en contenu avec des îlots d'interactivité. Envisagez d'autres frameworks lorsque :

  • L'application est une SPA complète avec routage côté client et état lourd (→ Next.js, SvelteKit, Remix)
  • Les fonctionnalités collaboratives en temps réel sont essentielles (→ Next.js + WebSockets)
  • Chaque page est derrière une authentification sans contenu public (→ Framework SPA)
  • Vous avez besoin de React Server Components (→ Next.js)

Collections de Contenu — Sélection du Chargeur

Fichiers markdown/MDX locaux → chargeur glob()
Fichier de données JSON/YAML unique → chargeur file()
Données d'API/CMS distantes au moment de la construction → Fonction de chargeur asynchrone personnalisée
Données distantes devant être fraîches par requête → Live Loader (Astro 6+)

Conseil de performance : Pour les sites avec >1000 entrées de contenu, utilisez glob() avec retainBody: false si vous n'avez pas besoin du corps markdown brut — réduit considérablement la taille du magasin de données.

Nouveautés d'Astro 6 (stable)

Ces fonctionnalités sont passées des drapeaux expérimentaux à stables dans Astro 6 — utilisez-les directement :

  • Content Security Policy — security.csp dans astro.config.mjs génère automatiquement des hachages pour vos scripts/styles → reference/configuration-reference/#securitycsp
  • API Fonts — optimisation intégrée des polices pour les polices auto-hébergées et les fournisseurs, pas de changement de mise en page → guides/fonts
  • Collections de Contenu Live — récupération de contenu au moment de la requête dans la couche de contenu via defineLiveCollection dans src/live.config.ts → guides/content-collections

Astro 6 nécessite également Node 22+ (Node 18 et 20 abandonnés) et regroupe Zod 4 via astro/zod (astro:schema et z depuis astro:content sont dépréciés).

Documentation de Référence

Chargez des conseils détaillés en fonction de votre tâche actuelle :

SujetRéférenceQuand Charger
Composantsreferences/components.mdÉcrire des composants Astro, Props, slots, expressions
Directives Clientreferences/client-directives.mdStratégies d'hydratation, client:load, client:visible, client:idle
Collections de Contenureferences/content-collections.mdAPI Content Layer, chargeurs, schémas, getCollection, getEntry, chargeurs live
Routagereferences/routing.mdPages, routes dynamiques, points d'accès, redirections
SSR et Adaptateursreferences/ssr-adapters.mdRendu à la demande, adaptateurs, îlots serveur, sessions
Îlots Serveurreferences/server-islands.mdserver:defer, contenu de repli, rendu différé
Sessionsreferences/sessions.mdAstro.session, état côté serveur, paniers d'achat
Transitions Entre Vuesreferences/view-transitions.mdClientRouter, animations, directives de transition
Actionsreferences/actions.mdGestion de formulaires, defineAction, validation
Middlewarereferences/middleware.mdonRequest, séquence, context.locals
Stylesreferences/styling.mdCSS limité aux composants, styles globaux, class:list
Imagesreferences/images.md<Image />, <Picture />, optimisation
Configurationreferences/configuration.mdastro.config.mjs, TypeScript, variables d'environnement
Variables d'Environnementreferences/environment-variables.mdastro:env, envField, schéma d'env typé sécurisé
Routage i18nreferences/i18n-routing.mdSites multilingues, locales, helpers astro:i18n

Directives par Contexte

Des règles spécifiques au contexte sont disponibles dans le répertoire rules/ :

  • rules/astro-components.rule.md → Modèles de structure de composants
  • rules/client-hydration.rule.md → Décisions de stratégie d'hydratation
  • rules/content-collections.rule.md → Meilleures pratiques pour les schémas de collection (API Content Layer)
  • rules/astro-routing.rule.md → Modèles de routage et routes dynamiques
  • rules/astro-ssr.rule.md → Configuration SSR et adaptateurs
  • rules/astro-images.rule.md → Modèles d'optimisation d'images
  • rules/astro-typescript.rule.md → Configuration TypeScript
  • rules/server-islands.rule.md → Modèles d'îlots serveur et server:defer
  • rules/sessions.rule.md → Gestion des sessions côté serveur

Règles Critiques

À FAIRE ABSOLUMENT

  • Utilisez l'architecture en îlots — hydratez uniquement les composants interactifs
  • Choisissez les directives client appropriées en fonction des besoins d'interaction
  • Utilisez server:defer pour le contenu personnalisé/dynamique sur les pages statiques
  • Définissez des schémas de collection de contenu avec Zod pour la sécurité des types
  • Utilisez l'API Content Layer avec des chargeurs (glob, file) dans src/content.config.ts
  • Importez Zod depuis astro/zod et le rendu depuis astro:content
  • Utilisez <Image /> et <Picture /> pour des images optimisées
  • Implémentez des barrières d'erreur appropriées pour les composants client
  • Utilisez TypeScript en mode strict pour la sécurité des types
  • Configurez l'adaptateur approprié pour la cible de déploiement
  • Utilisez Astro.props pour le passage de données aux composants
  • Utilisez le schéma astro:env pour des variables d'environnement typées sécurisées
  • Utilisez Astro.session pour la gestion d'état côté serveur

À NE PAS FAIRE

  • Hydrater des composants qui n'ont pas besoin d'interactivité (utilisez client: uniquement lorsque nécessaire)
  • Utiliser client:only sans spécifier le framework
  • Importer des images avec des chaînes de chemin (utilisez des instructions d'import)
  • Sauter la validation de schéma dans les collections de contenu
  • Utiliser output: 'hybrid' — ce n'est pas un mode valide ; utilisez static (par défaut) avec prerender = false par route, ou server avec prerender = true
  • Accéder à Astro.request dans les pages pré-rendues
  • Utiliser les API du navigateur dans le frontmatter des composants (code côté serveur)
  • Oublier d'installer les adaptateurs pour le déploiement SSR
  • Passer des fonctions comme props aux composants server:defer (non sérialisables)
  • Accéder à Astro.session dans les pages pré-rendues (nécessite un rendu à la demande)
  • Utiliser src/content/config.ts pour les nouveaux projets (utilisez src/content.config.ts avec des chargeurs)

Référence Rapide

Structure de Composant

---
// Script du composant (s'exécute sur le serveur)
interface Props {
  title: string;
  count?: number;
}
const { title, count = 0 } = Astro.props;
const data = await fetch('https://api.example.com/data');
---

<!-- Template du composant -->
<div>
  <h1>{title}</h1>
  <p>Count: {count}</p>
</div>

<style>
  /* Limité par défaut */
  h1 { color: navy; }
</style>

Priorité des Directives

  1. Pas de directive → HTML statique, zéro JavaScript
  2. server:defer → Rendu serveur différé (îlot serveur)
  3. client:load → Hydrater immédiatement au chargement de la page
  4. client:idle → Hydrater lorsque le navigateur est inactif
  5. client:visible → Hydrater lorsque le composant entre dans la fenêtre d'affichage
  6. client:media → Hydrater lorsque la requête média correspond
  7. client:only → Ignorer le SSR, rendre uniquement sur le client

Schéma de Collection de Contenu

// 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 };

Îlot Serveur

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

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

Format de Sortie

Lors de l'implémentation de fonctionnalités Astro, fournissez :

  1. Fichier de composant (.astro avec frontmatter et template)
  2. Mises à jour de configuration (astro.config.mjs si nécessaire)
  3. Schéma de collection de contenu (si vous utilisez des collections)
  4. Types TypeScript (pour les Props et les données)
  5. Brève explication de la stratégie d'hydratation choisie

Technologies

Astro 6.x (Node 22+), Architecture en îlots, API Content Layer (chargeurs glob/file, collections de contenu live), Schémas Zod 4 (astro/zod), API View Transitions, Îlots serveur (server:defer), Sessions, Actions, Middleware, astro:env (variables d'environnement typées sécurisées), Content Security Policy (security.csp), API Fonts, Routage i18n, Adaptateurs (Node, Vercel, Netlify, Cloudflare, Deno), Intégrations React/Vue/Svelte/Solid, Optimisation d'images, MDX, Markdoc, TypeScript, CSS limité, Tailwind CSS

Skills associés