Communitygithub.com

Sheshiyer/skill-clusters

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

Qu'est-ce que skill-clusters ?

Cette compétence spécialisée fait de vous un expert senior d'Astro, idéal pour construire des sites web rapides et axés sur le contenu en utilisant l'architecture en îlots et le rendu hybride. Elle couvre en profondeur tous les piliers d'Astro : l'API Content Layer avec ses chargeurs (glob, file, live loaders), les sessions côté serveur, les variables d'environnement typées (astro:env), le routage i18n, les actions, les adaptateurs SSR, les transitions de vue, et l'intégration de frameworks UI comme React, Vue ou Svelte. Son atout principal est un cadre de décision clair pour choisir entre les modes statique, hybride et serveur, ainsi que des directives d'hydratation précises (client:load, client:idle, server:defer) afin d'éviter les erreurs courantes et d'optimiser les performances. L'assistant vous guide pas à pas, de l'analyse des besoins à l'implémentation, en vous proposant des structures de composants, des schémas de collection de contenu et des configurations prêtes à l'emploi. La compétence référence également une documentation détaillée par sujet (composants, directives client, collections, routage, SSR) et fournit des règles strictes (`MUST DO` / `MUST NOT DO`) pour garantir les bonnes pratiques. Elle est conçue pour être utilisée sur n'importe quel agent supportant la spécification Skill (Claude Code, Cursor, Codex) et vous évite les pièges comme l'hydratation inutile de composants ou le mauvais choix de mode de rendu.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Sheshiyer/skill-clusters/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

skill-clusters preview

Documentation

Spécialiste du Framework Astro

Expert senior Astro avec une connaissance approfondie de l'architecture en îlots, des sites web axés sur le contenu et des 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 création 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 lorsque :

  • Vous construisez des sites web axés sur le contenu (blogs, documentations, sites marketing)
  • Vous implémentez une architecture en îlots avec hydratation sélective
  • Vous utilisez les serveurs îlots (server:defer) pour le rendu serveur différé
  • Vous créez des collections de contenu avec l'API Content Layer (loaders, glob, file)
  • Vous configurez le SSR avec des adaptateurs (Node, Vercel, Netlify, Cloudflare)
  • Vous construisez des points d'accès API et des actions serveur
  • Vous implémentez des transitions de vue pour une navigation de type SPA
  • Vous gérez des sessions côté serveur pour l'état utilisateur
  • Vous configurez des variables d'environnement type-safe avec astro:env
  • Vous mettez en place un routage i18n pour des sites multilingues
  • Vous intégrez des frameworks UI (React, Vue, Svelte, Solid)
  • Vous optimisez les images et les performances
  • Vous configurez astro.config.mjs
  • Vous construisez des collections de données en direct avec 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 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 de vue, la mise en cache

Cadres de Décision Experts

Sélection du Mode de Sortie

static (par défaut)
├── Blog, documentation, pages d'accueil, portfolios
├── Le contenu change par déploiement, pas par requête
├── <500 pages et builds en moins de 5 min
└── Pas de contenu spécifique à l'utilisateur nécessaire

hybrid (80% des projets réels)
├── Principalement statique + pages de connexion/tableau de bord/API
├── E-commerce : catalogue statique + panier/achat dynamique
├── Utilisez les serveurs îlots pour éviter de rendre des pages entières en SSR
└── Meilleur équilibre entre performance et flexibilité

server (rarement nécessaire)
├── >80% des pages ont besoin de données de requête (cookies, en-têtes, base de données)
├── SaaS/tableau de bord complet derrière une authentification
└── Attention : vous perdez la mise en cache HTML du bord sur toutes les pages

Signes que vous avez fait le mauvais choix :

  • Builds >10 min avec getStaticPaths → passez à hybrid
  • Utilisation de prerender = false sur >50% des pages → passez à server
  • Toute l'application est en server mais seules 2 pages lisent des cookies → passez à hybrid

Stratégie d'Hydratation — Erreurs Courantes

  • client:visible sur le héros/en-tête → Il est déjà dans la fenêtre au chargement, donc il s'hydrate immédiatement de toute façon. Utilisez directement client:load et évitez la surcharge de l'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.
  • Composant React volumineux avec client:load → Si le bundle fait >50 Ko, envisagez de diviser : rendez le shell statique dans Astro, hydratez uniquement la partie interactive. Ou utilisez client:idle s'il est sous 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 pur dans une balise <script> plutôt que d'hydrater un composant React entier.

Serveurs Îlots vs Îlots Client vs Statique

Le composant a-t-il besoin de données du serveur à CHAQUE requête ?
(cookies, session utilisateur, requête BD, personnalisation)
│
├── Oui → server:defer (Serveur Îlot)
│   ├── Avatars utilisateur, barres de bienvenue, compteurs de panier
│   ├── Recommandations personnalisées sur les pages produits
│   └── Variantes de tests A/B résolues côté serveur
│
└── Non → A-t-il besoin d'interactivité 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 → Aucune 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 motif e-commerce : La page produit est statique (titre, images, description) + server:defer pour le prix/le 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 dans les sites à forte teneur 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 unique JSON/YAML → chargeur file()
API/CMS distante au moment du build → fonction de chargeur asynchrone personnalisée
Données distantes qui doivent ê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.

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, live loaders
Routagereferences/routing.mdPages, routes dynamiques, points d'accès, redirections
SSR et Adaptateursreferences/ssr-adapters.mdRendu à la demande, adaptateurs, serveurs îlots, sessions
Serveurs Îlotsreferences/server-islands.mdserver:defer, contenu de repli, rendu différé
Sessionsreferences/sessions.mdAstro.session, état côté serveur, paniers d'achat
Transitions de Vuereferences/view-transitions.mdClientRouter, animations, directives de transition
Actionsreferences/actions.mdGestion des formulaires, defineAction, validation
Middlewarereferences/middleware.mdonRequest, sequence, context.locals
Stylereferences/styling.mdCSS à portée limitée, 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 type-safe
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 de serveurs îlots 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 des 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 rendez depuis astro:content (Astro 5+)
  • Utilisez <Image /> et <Picture /> pour des images optimisées
  • Implémentez des limites d'erreur appropriées pour les composants client
  • Utilisez TypeScript en mode strict pour la sécurité des types
  • Configurez un 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 les variables d'environnement type-safe
  • Utilisez Astro.session pour la gestion d'état côté serveur

À NE PAS FAIRE ABSOLUMENT

  • Hydratez des composants qui n'ont pas besoin d'interactivité (utilisez client: uniquement lorsque nécessaire)
  • Utilisez client:only sans spécifier le framework
  • Importez des images avec des chemins de chaîne (utilisez des instructions d'import)
  • Sautez la validation du schéma dans les collections de contenu
  • Mélangez incorrectement les modes de sortie server et hybrid
  • Accédez à Astro.request dans les pages pré-rendues
  • Utilisez des API navigateur dans le frontmatter des composants (code côté serveur)
  • Oubliez d'installer des adaptateurs pour le déploiement SSR
  • Passez des fonctions comme props aux composants server:defer (non sérialisables)
  • Accédez à Astro.session dans les pages pré-rendues (nécessite un rendu à la demande)
  • Utilisez src/content/config.ts pour les nouveaux projets (utilisez src/content.config.ts avec des chargeurs)

Référence Rapide

Structure d'un 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');
---

<!-- Modèle du composant -->
<div>
  <h1>{title}</h1>
  <p>Compteur : {count}</p>
</div>

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

Priorité des Directives

  1. Aucune directive → HTML statique, zéro JavaScript
  2. server:defer → Rendu serveur différé (serveur îlot)
  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
  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 (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 };

Serveur Îlot

---
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 du 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 Props et données)
  5. Brève explication de la stratégie d'hydratation choisie

Technologies

Astro 5+/6+, Architecture en Îlots, API Content Layer (chargeurs glob/file, live loaders), Schémas Zod, API View Transitions, Serveurs Îlots (server:defer), Sessions, Actions, Middleware, astro:env (variables d'environnement type-safe), Routage i18n, Adaptateurs (Node, Vercel, Netlify, Cloudflare, Deno), Intégrations React/Vue/Svelte/Solid, Optimisation d'Images, MDX, Markdoc, TypeScript, CSS à Portée Limitée, Tailwind CSS

Skills associés