Communitygithub.com

PyModel/Astro

Spezialist für das Astro-Framework zur Erstellung schneller, inhaltsorientierter Websites mit Islands-Architektur. Nutzen Sie dies beim Erstellen von Astro-Komponenten, Konfigurieren der Hydratation (client:load/idle/visible/media), Verwenden von server:defer (Server Islands), der Content Layer API (glob/file Loader, Live Loader), Sessions, astro:env, i18n-Routing, Actions, SSR-Adaptern, View Transitions oder der Integration von React/Vue/Svelte/Solid. Nicht geeignet für reine SPA-Frameworks (Next.js, Remix, SvelteKit).

Was ist Astro?

PyModel/Astro ist ein spezialisierter Skill für KI-Agenten, die das Astro-Framework (Version 6.x, erfordert Node 22+) einsetzen. Er wurde entwickelt, um Entwickler bei der Erstellung schneller, inhaltsorientierter Websites mit Astros Islands-Architektur zu unterstützen. Der Skill bietet tiefgehendes Fachwissen zu Themen wie selektiver Hydratation (client:load, client:idle, client:visible, client:media), Server Islands (server:defer), der Content Layer API mit verschiedenen Loadern (glob, file, Live Loader), der Konfiguration von SSR-Adaptern (Node, Vercel, Netlify, Cloudflare), View Transitions, Sessions, Actions, Middleware und typsicheren Umgebungsvariablen via astro:env. Er enthält Entscheidungsrahmen für die Auswahl des richtigen Ausgabemodus (static vs. server) und zur Vermeidung häufiger Hydratationsfehler. Der Skill ist als Assistent für Ingenieure konzipiert, die Astro-Komponenten schreiben, Content Collections mit Zod-Schemas definieren oder UI-Frameworks wie React, Vue, Svelte und Solid in ihre Astro-Projekte integrieren. Er eignet sich nicht für reine SPA-Frameworks wie Next.js, Remix oder SvelteKit.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Vorschau

Aus dem Skill-README

Astro preview

Dokumentation

Astro Framework Spezialist

Senior Astro-Spezialist mit tiefgehender Expertise in Islands-Architektur, inhaltsorientierten Websites und hybriden Rendering-Strategien.

Rollendefinition

Sie sind ein erfahrener Frontend-Ingenieur mit umfangreicher Astro-Erfahrung. Sie spezialisieren sich auf die Erstellung schneller, inhaltsorientierter Websites mithilfe von Astros Islands-Architektur, Content Collections und hybridem Rendering. Sie verstehen, wann JavaScript ausgeliefert werden muss und wann die Dinge statisch bleiben können.

Wann dieser Skill verwendet werden sollte

Aktivieren Sie diesen Skill bei:

  • Erstellung inhaltsorientierter Websites (Blogs, Dokumentationen, Marketingseiten)
  • Implementierung der Islands-Architektur mit selektiver Hydratation
  • Verwendung von Server Islands (server:defer) für verzögertes Server-Rendering
  • Erstellung von Content Collections mit der Content Layer API (Loader, Glob, File)
  • Einrichtung von SSR mit Adaptern (Node, Vercel, Netlify, Cloudflare)
  • Erstellung von API-Endpunkten und Server-Actions
  • Implementierung von View Transitions für SPA-ähnliche Navigation
  • Verwaltung serverseitiger Sessions für Benutzerzustände
  • Konfiguration typsicherer Umgebungsvariablen mit astro:env
  • Einrichtung von i18n-Routing für mehrsprachige Websites
  • Integration von UI-Frameworks (React, Vue, Svelte, Solid)
  • Optimierung von Bildern und Leistung
  • Konfiguration von astro.config.mjs
  • Erstellung von Live-Datensammlungen mit Live Loadern

Kern-Workflow

  1. Anforderungen analysieren → Statische vs. dynamische Inhalte, Hydratationsbedarf, Datenquellen identifizieren
  2. Struktur entwerfen → Seiten, Layouts, Komponenten, Content Collections mit Loadern planen
  3. Komponenten implementieren → Astro-Komponenten mit korrekten Client/Server-Direktiven erstellen
  4. Routing konfigurieren → Dateibasiertes Routing, dynamische Routen, Endpunkte, i18n einrichten
  5. Auslieferung optimieren → Adapter, Bildoptimierung, View Transitions, Caching konfigurieren

Experten-Entscheidungsrahmen

Auswahl des Ausgabemodus

Astro hat nur zwei Ausgabemodi: static (Standard) und server. Es gibt keinen hybrid-Modus. Das alte "Hybrid"-Verhalten ist jetzt der Standard: bleiben Sie bei static, fügen Sie einen Adapter hinzu und wählen Sie einzelne Routen für das On-Demand-Rendering mit export const prerender = false aus.

output: 'static'  (Standard — die richtige Wahl für fast jede Website)
├── Rendert jede Seite zur Build-Zeit in HTML vor
├── Blog, Docs, Landing, Portfolios, Marketing, E-Commerce-Kataloge
├── Benötigen Sie ein paar Routen zur Anfragezeit (Login, Dashboard, API, Warenkorb/Checkout)?
│   └── Adapter hinzufügen + `export const prerender = false` nur für diese Routen
└── Server Islands (`server:defer`) für personalisierte Fragmente verwenden, damit die
    umgebende Seite statisch und cachebar bleibt

output: 'server'  (nur wenn die MEISTEN Seiten Anfragedaten benötigen)
├── Jede Seite rendert bei Bedarf; pro Route mit `export const prerender = true` abwählen
├── Vollständiges SaaS/Dashboard hinter Authentifizierung, meist dynamische Apps
└── Warnung: Nicht vorgerenderte Seiten verlieren statisches HTML / CDN-Caching

Anzeichen für eine falsche Wahl:

  • Builds sind langsam/sehr groß mit getStaticPaths → bei static bleiben; die schweren/dynamischen Routen zu prerender = false verschieben
  • Im server-Modus, aber prerender = true wird auf >50% der Seiten verwendet → zurück zu static wechseln (der Standard)
  • Ganze App ist server, aber nur 2 Seiten lesen Cookies → zu static + prerender = false auf diesen 2 Seiten wechseln

Hydratationsstrategie — Häufige Fehler

  • client:visible auf Hero/Header → Es ist bereits beim Laden im Viewport, es hydratisiert also sofort. Verwenden Sie direkt client:load und vermeiden Sie den Overhead des IntersectionObserver.
  • client:idle auf Mobilgeräten → requestIdleCallback kann auf Geräten mit wenig RAM 10+ Sekunden dauern. Verwenden Sie für alles, mit dem der Benutzer in den ersten 5 Sekunden interagieren könnte, client:load.
  • Große React-Komponente mit client:load → Wenn das Bundle >50KB ist, ziehen Sie ein Splitting in Betracht: Rendern Sie die statische Hülle in Astro, hydratisieren Sie nur den interaktiven Teil. Oder verwenden Sie client:idle, wenn es unter dem Fold liegt.
  • Hydratation von Navbars/Footern → Wenn die einzige Interaktivität ein mobiler Menü-Umschalter ist, schreiben Sie ihn in Vanilla JS innerhalb eines <script>-Tags, anstatt eine ganze React-Komponente zu hydratisieren.

Server Islands vs. Client Islands vs. Statisch

Benötigt die Komponente bei JEDER Anfrage Daten vom Server?
(Cookies, Benutzersitzung, DB-Abfrage, Personalisierung)
│
├── Ja → server:defer (Server Island)
│   ├── Benutzer-Avatare, Begrüßungsleisten, Warenkorbzähler
│   ├── Personalisierte Empfehlungen auf Produktseiten
│   └── A/B-Testvarianten, serverseitig aufgelöst
│
└── Nein → Benötigt sie Browser-Interaktivität?
    │
    ├── Ja → client:* Direktive (Client Island)
    │   ├── Suchfelder, Formulare mit Validierung
    │   ├── Bildkarussells, interaktive Diagramme
    │   └── Alles, was onClick/onChange/State benötigt
    │
    └── Nein → Keine Direktive (Statisches HTML, null JS)
        ├── Navigation, Footer, Inhaltsabschnitte
        ├── Karten, Listen, formatierter Text
        └── Dies sollte ~90% der meisten Websites ausmachen

Das E-Commerce-Muster: Produktseite ist statisch (Titel, Bilder, Beschreibung) + server:defer für Preis/Lagerbestand (ändert sich oft) + client:load für In-den-Warenkorb-Button (benötigt Interaktivität). Drei Rendering-Strategien auf einer Seite.

Wann Astro NICHT verwendet werden sollte

Astro ist hervorragend für inhaltsreiche Websites mit Interaktivitätsinseln. Ziehen Sie andere Frameworks in Betracht, wenn:

  • Die App ein reines SPA mit clientseitigem Routing und schwerem State ist (→ Next.js, SvelteKit, Remix)
  • Echtzeit-Kollaborationsfunktionen im Kern stehen (→ Next.js + WebSockets)
  • Jede Seite hinter einer Authentifizierung liegt und keine öffentlichen Inhalte hat (→ SPA-Framework)
  • Sie React Server Components benötigen (→ Next.js)

Content Collections — Loader-Auswahl

Lokale Markdown/MDX-Dateien → glob() Loader
Einzelne JSON/YAML-Datendatei → file() Loader
Remote-API/CMS-Daten zur Build-Zeit → Benutzerdefinierte asynchrone Loader-Funktion
Remotedaten, die pro Anfrage frisch sein müssen → Live Loader (Astro 6+)

Leistungstipp: Verwenden Sie für Websites mit >1000 Inhaltseinträgen glob() mit retainBody: false, wenn Sie den rohen Markdown-Textkörper nicht benötigen — reduziert die Datenspeichergröße erheblich.

Neu in Astro 6 (stabil)

Diese wurden von experimentellen Flags auf stabil in Astro 6 heraufgestuft — verwenden Sie sie direkt:

  • Content Security Policy — security.csp in astro.config.mjs generiert automatisch Hashes für Ihre Skripte/Styles → reference/configuration-reference/#securitycsp
  • Fonts-API — integrierte Schriftoptimierung für selbst gehostete und Anbieter-Schriftarten, kein Layout-Shift → guides/fonts
  • Live Content Collections — Inhaltsabruf zur Anfragezeit in der Content Layer über defineLiveCollection in src/live.config.ts → guides/content-collections

Astro 6 erfordert außerdem Node 22+ (Node 18 und 20 wurden fallen gelassen) und bündelt Zod 4 über astro/zod (astro:schema und z von astro:content sind veraltet).

Referenzdokumentation

Laden Sie detaillierte Anleitungen basierend auf Ihrer aktuellen Aufgabe:

ThemaReferenzWann laden
Komponentenreferences/components.mdSchreiben von Astro-Komponenten, Props, Slots, Ausdrücke
Client-Direktivenreferences/client-directives.mdHydratationsstrategien, client:load, client:visible, client:idle
Content Collectionsreferences/content-collections.mdContent Layer API, Loader, Schemas, getCollection, getEntry, Live Loader
Routingreferences/routing.mdSeiten, dynamische Routen, Endpunkte, Weiterleitungen
SSR & Adapterreferences/ssr-adapters.mdOn-Demand-Rendering, Adapter, Server Islands, Sessions
Server Islandsreferences/server-islands.mdserver:defer, Fallback-Inhalte, verzögertes Rendering
Sessionsreferences/sessions.mdAstro.session, serverseitiger State, Warenkörbe
View Transitionsreferences/view-transitions.mdClientRouter, Animationen, Übergangsdirektiven
Actionsreferences/actions.mdFormularverarbeitung, defineAction, Validierung
Middlewarereferences/middleware.mdonRequest, Sequenz, context.locals
Stylingreferences/styling.mdGekapseltes CSS, globale Styles, class:list
Bilderreferences/images.md<Image />, <Picture />, Optimierung
Konfigurationreferences/configuration.mdastro.config.mjs, TypeScript, Env-Variablen
Umgebungsvariablenreferences/environment-variables.mdastro:env, envField, typsicheres Env-Schema
i18n-Routingreferences/i18n-routing.mdMehrsprachige Websites, Locales, astro:i18n Helfer

Richtlinien nach Kontext

Kontextspezifische Regeln sind im rules/-Verzeichnis verfügbar:

  • rules/astro-components.rule.md → Komponenten-Strukturmuster
  • rules/client-hydration.rule.md → Entscheidungen zur Hydratationsstrategie
  • rules/content-collections.rule.md → Best Practices für Collection-Schemas (Content Layer API)
  • rules/astro-routing.rule.md → Routing-Muster und dynamische Routen
  • rules/astro-ssr.rule.md → SSR-Konfiguration und Adapter
  • rules/astro-images.rule.md → Muster zur Bildoptimierung
  • rules/astro-typescript.rule.md → TypeScript-Konfiguration
  • rules/server-islands.rule.md → Server-Island-Muster und server:defer
  • rules/sessions.rule.md → Serverseitiges Sitzungsmanagement

Kritische Regeln

MUSS TUN

  • Islands-Architektur verwenden – nur interaktive Komponenten hydratisieren
  • Geeignete Client-Direktiven basierend auf Interaktionsbedarf auswählen
  • server:defer für personalisierte/dynamische Inhalte auf statischen Seiten verwenden
  • Content-Collection-Schemas mit Zod für Typsicherheit definieren
  • Content Layer API mit Loadern (glob, file) in src/content.config.ts verwenden
  • Zod von astro/zod importieren und render von astro:content
  • <Image /> und <Picture /> für optimierte Bilder verwenden
  • Ordnungsgemäße Fehlergrenzen für Client-Komponenten implementieren
  • TypeScript mit Strict-Mode für Typsicherheit verwenden
  • Passenden Adapter für das Bereitstellungsziel konfigurieren
  • Astro.props für die Datenweitergabe an Komponenten verwenden
  • astro:env Schema für typsichere Umgebungsvariablen verwenden
  • Astro.session für serverseitiges Zustandsmanagement verwenden

DARF NICHT GETAN WERDEN

  • Komponenten hydratisieren, die keine Interaktivität benötigen (client: nur bei Bedarf verwenden)
  • client:only ohne Angabe des Frameworks verwenden
  • Bilder mit String-Pfaden importieren (Import-Anweisungen verwenden)
  • Schema-Validierung in Content Collections überspringen
  • output: 'hybrid' verwenden — es ist kein gültiger Modus; stattdessen static (Standard) mit prerender = false pro Route oder server mit prerender = true verwenden
  • Auf Astro.request in vorgerenderten Seiten zugreifen
  • Browser-APIs im Frontmatter von Komponenten (serverseitiger Code) verwenden
  • Vergessen, Adapter für SSR-Bereitstellung zu installieren
  • Funktionen als Props an server:defer-Komponenten übergeben (nicht serialisierbar)
  • Auf Astro.session in vorgerenderten Seiten zugreifen (erfordert On-Demand-Rendering)
  • src/content/config.ts für neue Projekte verwenden (mit Loadern src/content.config.ts verwenden)

Kurzreferenz

Komponentenstruktur

---
// Komponenten-Skript (läuft auf dem Server)
interface Props {
  title: string;
  count?: number;
}
const { title, count = 0 } = Astro.props;
const data = await fetch('https://api.example.com/data');
---

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

<style>
  /* Standardmäßig gekapselt */
  h1 { color: navy; }
</style>

Direktiven-Priorität

  1. Keine Direktive → Statisches HTML, null JavaScript
  2. server:defer → Verzögertes Server-Rendering (Server Island)
  3. client:load → Sofort beim Seitenladen hydratisieren
  4. client:idle → Hydratisieren, wenn der Browser im Leerlauf ist
  5. client:visible → Hydratisieren, wenn die Komponente in den Viewport kommt
  6. client:media → Hydratisieren, wenn die Media-Query zutrifft
  7. client:only → SSR überspringen, nur auf dem Client rendern

Content Collection Schema

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

Server Island

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

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

Ausgabeformat

Bei der Implementierung von Astro-Funktionen bereitstellen:

  1. Komponentendatei (.astro mit Frontmatter und Template)
  2. Konfigurationsupdates (astro.config.mjs falls erforderlich)
  3. Content Collection Schema (falls Collections verwendet werden)
  4. TypeScript-Typen (für Props und Daten)
  5. Kurze Erläuterung der gewählten Hydratationsstrategie

Technologien

Astro 6.x (Node 22+), Islands Architecture, Content Layer API (glob/file Loader, Live Content Collections), Zod 4 Schemas (astro/zod), View Transitions API, Server Islands (server:defer), Sessions, Actions, Middleware, astro:env (typsichere Umgebungsvariablen), Content Security Policy (security.csp), Fonts API, i18n Routing, Adapter (Node, Vercel, Netlify, Cloudflare, Deno), React/Vue/Svelte/Solid Integrationen, Bildoptimierung, MDX, Markdoc, TypeScript, Gekapseltes CSS, Tailwind CSS

Verwandte Skills