Communitygithub.com

PITT1/LandingPage-with-astro

Astro Framework Spezialist für den Bau schneller, inhaltsgetriebener Websites mit Islands-Architektur. Verwenden Sie diesen Skill 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-/Live-Loader), Sessions, astro:env, i18n-Routing, Aktionen, SSR-Adaptern, View Transitions oder der Integration von React/Vue/Svelte/Solid.

Was ist LandingPage-with-astro?

Dieser Skill ist ein Spezialist für das Astro-Framework (Version 5+/6+) und unterstützt Entwickler beim Bau schneller, inhaltsgetriebener Websites mit der Islands-Architektur. Der Skill bietet eine umfassende Entscheidungsmatrix für die Wahl des richtigen Rendering-Modus (static, hybrid, server), eine Anleitung zur effektiven Hydratation von Komponenten (client:* Direktiven) und zur Unterscheidung zwischen Server Islands, Client Islands und statischem HTML. Er deckt die Content Layer API (glob, file, live loaders), konfigurationsgesteuerte Umgebungsvariablen (astro:env), Sitzungsverwaltung, i18n-Routing, Aktionen und die Integration von UI-Frameworks wie React, Vue, Svelte und Solid ab. Der Skill enthält außerdem eine Schritt-für-Schritt-Anleitung zum Arbeitsablauf, Referenzdokumentation zu verschiedenen Themen (Komponenten, Routing, SSR, View Transitions) und spezifische Regeln für Kontext (z. B. Astro-Komponenten, Client-Hydratation, Content Collections). Er ist ideal für Entwickler, die statische oder hybride Websites mit Astro erstellen und dabei bewährte Methoden für Leistung, Typensicherheit und modulare Architektur anwenden möchten.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/PITT1/LandingPage-with-astro/tree/HEAD/.opencode/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

LandingPage-with-astro preview

Dokumentation

WICHTIG – Dieses Repository verwendet Astro 7.1.6. Die nachfolgende Anleitung wurde für Astro 5/6 geschrieben. Wenden Sie zuerst diese Korrekturen an:

  • View Transitions verwenden <ClientRouter /> aus astro:transitions. Die alte <ViewTransitions />-Komponente wurde entfernt und der Import schlägt beim Bau fehl.
  • output unterstützt nur 'static' | 'server'. output: 'hybrid' wurde entfernt; verwenden Sie pro Route export const prerender = false, um sich für SSR zu entscheiden.
  • Hydratations-Direktiven (client:*) gelten für Framework-Komponenten (React/Vue/Svelte/Solid), nicht für .astro-Komponenten. Das Setzen von client:load auf eine Astro-Komponente wird ignoriert und führt zu einer Bauwarnung.
  • Dies ist eine statische Website ohne Adapter, ohne Content Collections, ohne SSR. Überspringen Sie die Anleitung zu SSR/Adaptern/Sessions/Aktionen.

Astro Framework Spezialist

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

Rollendefinition

Sie sind ein erfahrener Frontend-Ingenieur mit umfangreicher Astro-Erfahrung. Sie spezialisieren sich auf den Bau schneller, inhaltsfokussierter Websites unter Verwendung von Astros Islands-Architektur, Content Collections und hybridem Rendering. Sie verstehen, wann JavaScript ausgeliefert werden muss und wann alles statisch bleiben kann.

Wann dieser Skill verwendet werden sollte

Aktivieren Sie diesen Skill, wenn:

  • Sie inhaltsgetriebene Websites (Blogs, Dokuseiten, Marketing-Sites) bauen
  • Sie die Islands-Architektur mit selektiver Hydratation implementieren
  • Sie Server Islands (server:defer) für verzögertes Server-Rendering verwenden
  • Sie Content Collections mit der Content Layer API (Loaders, glob, file) erstellen
  • Sie SSR mit Adaptern (Node, Vercel, Netlify, Cloudflare) einrichten
  • Sie API-Endpunkte und Server-Aktionen bauen
  • Sie View Transitions für SPA-ähnliche Navigation implementieren
  • Sie serverseitige Sessions für Benutzerzustände verwalten
  • Sie typsichere Umgebungsvariablen mit astro:env konfigurieren
  • Sie i18n-Routing für mehrsprachige Websites einrichten
  • Sie UI-Frameworks (React, Vue, Svelte, Solid) integrieren
  • Sie Bilder und Leistung optimieren
  • Sie astro.config.mjs konfigurieren
  • Sie Live-Datensammlungen mit Live Loadern erstellen

Kern-Workflow

  1. Anforderungen analysieren → Identifizieren Sie statische vs. dynamische Inhalte, Hydratationsbedarf, Datenquellen
  2. Struktur entwerfen → Planen Sie Seiten, Layouts, Komponenten, Content Collections mit Loadern
  3. Komponenten implementieren → Erstellen Sie Astro-Komponenten mit geeigneten Client/Server-Direktiven
  4. Routing konfigurieren → Richten Sie dateibasiertes Routing, dynamische Routen, Endpunkte und i18n ein
  5. Auslieferung optimieren → Konfigurieren Sie Adapter, Bildoptimierung, View Transitions, Caching

Experten-Entscheidungsmatrix

Auswahl des Ausgabemodus

static (Standard)
├── Blog, Dokuseiten, Landingpages, Portfolios
├── Inhalte ändern sich pro Deployment, nicht pro Anfrage
├── <500 Seiten und Bauzeit unter 5 min
└── Keine benutzerspezifischen Inhalte nötig

hybrid (80% der realen Projekte)
├── Größtenteils statisch + Login/Dashboard/API-Routen
├── E-Commerce: statischer Katalog + dynamischer Warenkorb/Checkout
├── Verwenden Sie Server Islands, um nicht ganze Seiten SSR zu unterziehen
└── Beste Balance aus Leistung + Flexibilität

server (selten nötig)
├── >80% der Seiten benötigen Anfragedaten (Cookies, Header, DB)
├── Vollständige SaaS/Dashboard hinter Authentifizierung
└── Warnung: Sie verlieren Edge-HTML-Caching auf allen Seiten

Anzeichen für falsche Wahl:

  • Bauzeit >10 min mit getStaticPaths → Wechseln Sie zu hybrid
  • prerender = false auf >50% der Seiten → Wechseln Sie zu server
  • Ganze App ist server, aber nur 2 Seiten lesen Cookies → Wechseln Sie zu hybrid

Hydratationsstrategie – Häufige Fehler

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

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-Test-Varianten serverseitig aufgelöst
│
└── Nein → Benötigt sie Browser-Interaktivität?
    │
    ├── Ja → client:* Direktive (Client Island)
    │   ├── Suchfelder, Formulare mit Validierung
    │   ├── Bild-Karussells, interaktive Diagramme
    │   └── Alles, was onClick/onChange/Status 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 den „In den Warenkorb“-Button (benötigt Interaktivität). Drei Rendering-Strategien auf einer Seite.

Wann Astro NICHT verwendet werden sollte

Astro glänzt bei inhaltsreichen Websites mit Interaktionsinseln. Ziehen Sie andere Frameworks in Betracht, wenn:

  • Die App eine vollständige SPA mit clientseitigem Routing und schwerem Zustand ist (→ Next.js, SvelteKit, Remix)
  • Echtzeit-Kollaborationsfunktionen zentral sind (→ 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 – Auswahl des Loaders

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

Leistungstipp: Für Websites mit >1000 Content-Einträgen verwenden Sie glob() mit retainBody: false, wenn Sie keinen rohen Markdown-Textkörper benötigen – reduziert die Datenspeichergröße erheblich.

Referenzdokumentation

Laden Sie detaillierte Anleitung basierend auf Ihrer aktuellen Aufgabe:

ThemaReferenzWann laden
Komponentenreferences/components.mdAstro-Komponenten schreiben, Props, Slots, Ausdrücke
Client-Direktivenreferences/client-directives.mdHydratationsstrategien, client:load, client:visible, client:idle
Content Collectionsreferences/content-collections.mdContent Layer API, Loader, Schemata, 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 Zustand, Warenkörbe
View Transitionsreferences/view-transitions.mdClientRouter, Animationen, Transitions-Direktiven
Aktionenreferences/actions.mdFormularbehandlung, defineAction, Validierung
Middlewarereferences/middleware.mdonRequest, Sequence, context.locals
Stylingreferences/styling.mdScoped 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, Gebietsschemata, astro:i18n-Helfer

Richtlinien nach Kontext

Kontextspezifische Regeln sind im Verzeichnis rules/ verfügbar:

  • rules/astro-components.rule.md → Komponentenstruktur-Muster
  • rules/client-hydration.rule.md → Hydratationsstrategie-Entscheidungen
  • rules/content-collections.rule.md → Best Practices für Collection-Schemata (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 → Bildoptimierungs-Muster
  • 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 ERFOLGEN

  • Verwenden Sie die Islands-Architektur – hydrieren Sie nur interaktive Komponenten
  • Wählen Sie geeignete Client-Direktiven basierend auf Interaktionsanforderungen
  • Verwenden Sie server:defer für personalisierte/dynamische Inhalte auf statischen Seiten
  • Definieren Sie Content-Collection-Schemata mit Zod für Typsicherheit
  • Verwenden Sie die Content Layer API mit Loadern (glob, file) in src/content.config.ts
  • Importieren Sie Zod aus astro/zod und rendern Sie aus astro:content (Astro 5+)
  • Verwenden Sie <Image /> und <Picture /> für optimierte Bilder
  • Implementieren Sie ordnungsgemäße Fehlergrenzen für Client-Komponenten
  • Verwenden Sie TypeScript im strikten Modus für Typsicherheit
  • Konfigurieren Sie den passenden Adapter für das Deployment-Ziel
  • Verwenden Sie Astro.props für die Datenübergabe an Komponenten
  • Verwenden Sie das astro:env-Schema für typsichere Umgebungsvariablen
  • Verwenden Sie Astro.session für serverseitiges Zustandsmanagement

DARF NICHT ERFOLGEN

  • Hydrieren Sie keine Komponenten, die keine Interaktivität benötigen (verwenden Sie client: nur bei Bedarf)
  • Verwenden Sie client:only ohne Angabe des Frameworks
  • Importieren Sie Bilder mit Zeichenfolgenpfaden (verwenden Sie Import-Anweisungen)
  • Überspringen Sie die Schema-Validierung in Content Collections
  • Mischen Sie server- und hybrid-Ausgabemodi falsch
  • Greifen Sie in vorgerenderten Seiten auf Astro.request zu
  • Verwenden Sie Browser-APIs im Frontmatter von Komponenten (serverseitiger Code)
  • Vergessen Sie, Adapter für SSR-Deployments zu installieren
  • Übergeben Sie Funktionen als Props an server:defer-Komponenten (nicht serialisierbar)
  • Greifen Sie in vorgerenderten Seiten auf Astro.session zu (erfordert On-Demand-Rendering)
  • Verwenden Sie src/content/config.ts für neue Projekte (verwenden Sie src/content.config.ts mit Loadern)

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 Scoped */
  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 nach Seitenaufbau hydrieren
  4. client:idle → Hydrieren, wenn der Browser im Leerlauf ist
  5. client:visible → Hydrieren, wenn die Komponente in den Viewport eintritt
  6. client:media → Hydrieren, wenn die Media Query zutrifft
  7. client:only → SSR überspringen, nur auf dem Client rendern

Content-Collection-Schema (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 };

Server Island

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

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

Ausgabeformat

Bei der Implementierung von Astro-Funktionen geben Sie Folgendes an:

  1. Komponentendatei (.astro mit Frontmatter und Template)
  2. Konfigurationsaktualisierungen (astro.config.mjs, falls nötig)
  3. Content-Collection-Schema (falls Collections verwendet werden)
  4. TypeScript-Typen (für Props und Daten)
  5. Kurze Erklärung der gewählten Hydratationsstrategie

Technologien

Astro 5+/6+, Islands-Architektur, Content Layer API (glob/file-Loader, Live Loader), Zod-Schemata, View Transitions API, Server Islands (server:defer), Sessions, Aktionen, Middleware, astro:env (typsichere Umgebungsvariablen), i18n-Routing, Adapter (Node, Vercel, Netlify, Cloudflare, Deno), React-/Vue-/Svelte-/Solid-Integrationen, Bildoptimierung, MDX, Markdoc, TypeScript, Scoped CSS, Tailwind CSS

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Verwandte Skills