Communitygithub.com

albertopo94/my-agent-rules

Spécialiste du framework Astro pour la création de sites web rapides et orientés contenu avec l'architecture d'îles. À 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 (îles serveur), de l'API Content Layer (loaders glob/file, live loaders), des sessions, astro:env, du routage i18n, des actions, des adaptateurs SSR, des transitions de 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 my-agent-rules ?

Cette compétence transforme votre agent IA en spécialiste senior du framework Astro, un générateur de sites statiques modernes qui excelle dans la création de sites web rapides et orientés contenu grâce à son architecture d'îles unique. Elle est particulièrement utile pour les développeurs qui construisent des blogs, des documentation, des sites marketing ou des e-commerces hybrides, en combinant des pages statiques avec des composants interactifs sélectivement hydratés. Le skill couvre l'ensemble des fonctionnalités avancées d'Astro 5 et 6 : l'API Content Layer avec ses loaders (glob, file, live loaders), les server islands (server:defer), les sessions serveur, le routage i18n, les actions, les adaptateurs SSR (Node, Vercel, Netlify, Cloudflare, Deno), les transitions de vues, et la configuration type-safe des variables d'environnement via astro:env. Il fournit des cadres de décision détaillés pour choisir entre les modes de rendu (static, hybrid, server), sélectionner la bonne stratégie d'hydratation, et différencier les îles client des îles serveur, avec des conseils pour éviter les erreurs courantes comme l'hydratation inutile ou le mauvais choix de mode de sortie. Compatible avec Claude Code, Cursor, Codex et les autres agents IA lisant des fichiers SKILL.md.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/albertopo94/my-agent-rules/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

my-agent-rules preview

Documentation

Spécialiste du Framework Astro

Spécialiste senior Astro avec une expertise approfondie dans l'architecture d'îles, les sites web orientés contenu et les 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 vous spécialisez dans la création de sites web rapides et axés sur le contenu en utilisant l'architecture d'îles 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 orientés contenu (blogs, documentation, sites marketing)
  • Vous implémentez une architecture d'îles avec hydratation sélective
  • Vous utilisez des îles serveur (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 de terminaison d'API et des actions serveur
  • Vous implémentez des transitions de vues 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 d'interface utilisateur (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, les layouts, les composants, les collections de contenu avec les loaders
  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 de terminaison, l'i18n
  5. Optimiser la livraison → Configurer les adaptateurs, l'optimisation des images, les transitions de vues, 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 de moins de 5 min
└── Aucun contenu spécifique à l'utilisateur nécessaire

hybride (80 % des projets réels)
├── Surtout statique + routes de connexion/tableau de bord/API
├── E-commerce : catalogue statique + panier/paiement dynamiques
├── Utiliser les îles serveur pour éviter de rendre des pages entières en SSR
└── Meilleur équilibre performances + flexibilité

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

Signes que vous avez fait le mauvais choix :

  • Les builds prennent >10 min avec getStaticPaths → passez à hybride
  • Vous utilisez prerender = false sur >50 % des pages → passez à serveur
  • Toute l'application est en serveur mais seulement 2 pages lisent des cookies → passez à hybride

Stratégie d'Hydratation — Erreurs Courantes

  • client:visible sur le héros/en-tête → Il est déjà dans le viewport au chargement, donc il s'hydrate immédiatement de toute façon. Utilisez client:load directement et évitez la surcharge du 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 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 vanilla JS dans une balise <script> au lieu d'hydrater un composant React entier.

Îles Serveur vs Îles 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 (Île Serveur)
│   ├── Avatars utilisateur, barres de salutation, compteurs de panier
│   ├── Recommandations personnalisées sur les pages produit
│   └── Variantes de test A/B résolues côté serveur
│
└── Non → A-t-il besoin d'interactivité navigateur ?
    │
    ├── Oui → directive client:* (Île Client)
    │   ├── Champs 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 d'ajout 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 à contenu dense avec des îles d'interactivité. Envisagez d'autres frameworks lorsque :

  • L'application est une SPA complète avec routage client et état lourd (→ Next.js, SvelteKit, Remix)
  • Les fonctionnalités collaboratives en temps réel sont au cœur (→ 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 Loader

Fichiers markdown/MDX locaux → loader glob()
Fichier de données JSON/YAML unique → loader file()
Données API/CMS distantes au moment du build → Fonction de loader 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, loaders, schémas, getCollection, getEntry, live loaders
Routagereferences/routing.mdPages, routes dynamiques, points de terminaison, redirections
SSR & Adaptateursreferences/ssr-adapters.mdRendu à la demande, adaptateurs, îles serveur, sessions
Îles Serveurreferences/server-islands.mdserver:defer, contenu de repli, rendu différé
Sessionsreferences/sessions.mdAstro.session, état côté serveur, paniers d'achat
Transitions de Vuesreferences/view-transitions.mdClientRouter, animations, directives de transition
Actionsreferences/actions.mdGestion de formulaires, defineAction, validation
Middlewarereferences/middleware.mdonRequest, sequence, context.locals
Stylereferences/styling.mdCSS scopé, 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'environnement type-safe
Routage i18nreferences/i18n-routing.mdSites multilingues, locales, helpers astro:i18n

Règles Critiques

À FAIRE ABSOLUMENT

  • Utiliser l'architecture d'îles — hydrater uniquement les composants interactifs
  • Choisir les directives client appropriées en fonction des besoins d'interaction
  • Utiliser server:defer pour le contenu personnalisé/dynamique sur les pages statiques
  • Définir les schémas de collections de contenu avec Zod pour la sécurité des types
  • Utiliser l'API Content Layer avec les loaders (glob, file) dans src/content.config.ts
  • Importer Zod depuis astro/zod et render depuis astro:content (Astro 5+)
  • Utiliser <Image /> et <Picture /> pour les images optimisées
  • Implémenter des limites d'erreur appropriées pour les composants client
  • Utiliser TypeScript avec le mode strict pour la sécurité des types
  • Configurer l'adaptateur approprié pour la cible de déploiement
  • Utiliser Astro.props pour le passage de données aux composants
  • Utiliser le schéma astro:env pour les variables d'environnement type-safe
  • Utiliser Astro.session pour la gestion d'état côté serveur

À NE PAS FAIRE

  • Hydrater des composants qui n'ont pas besoin d'interactivité (utiliser client: uniquement quand nécessaire)
  • Utiliser client:only sans spécifier le framework
  • Importer des images avec des chemins de chaîne (utiliser des instructions d'import)
  • Sauter la validation du schéma dans les collections de contenu
  • Mélanger incorrectement les modes de sortie server et hybride
  • Accéder à Astro.request dans les pages pré-rendues
  • Utiliser les API 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 (utiliser src/content.config.ts avec des loaders)

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>Count : {count}</p>
</div>

<style>
  /* Scopé 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é (île 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 le viewport
  6. client:media → Hydrater lorsque la requête média correspond
  7. client:only → Ignorer le SSR, rendu 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 };

Île Serveur

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

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

Commandes CLI

CommandeUtilisation
npx astro devDémarrer le serveur de développement
npx astro syncRégénérer les types TypeScript — réexécuter après avoir ajouté ou changé des intégrations
npx astro checkVérifier les erreurs de types et de configuration du projet
npx astro buildProduire l'artefact de déploiement
npx astro add <intégration>Ajouter une intégration ou un adaptateur (ex. : node, cloudflare, netlify, vercel)

Porte de Déploiement

Avant tout déploiement :

  1. npx astro add <adaptateur> --yes si l'adaptateur n'est pas encore configuré.
  2. npx astro check — corriger les erreurs de types et de configuration avant de builder.
  3. npx astro build.
  4. Vérifier que le répertoire de sortie du build existe et n'est pas vide avant de continuer.

Astro publie un index de documentation écrit pour les agents à l'adresse https://docs.astro.build/llms.txt — consultez-le ainsi que la documentation pour les API actuelles au lieu de vous fier à votre mémoire.

Format de Sortie

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

  1. Fichier du composant (.astro avec frontmatter et modèle)
  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 5+/6+, Architecture d'Îles, API Content Layer (loaders glob/file, live loaders), Schémas Zod, API View Transitions, Îles Serveur (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 Scopé, Tailwind CSS

Skills associés