Wann verwenden
- Der Benutzer wünscht eine neue Landingpage (für Produkt, Dienstleistung, Event, Portfolio, Warteliste)
- Er möchte eine bestehende Landingpage überarbeiten, damit sie professionell und einzigartig aussieht
- Er bittet um Animationen, Scrolleffekte oder Mikrointeraktionen auf einer Marketingseite
- Er befindet sich in der Planungsphase: Welche Abschnitte, welche Botschaft, welche Struktur
Stack (und warum)
| Komponente | Wahl | Warum | Verworfene Alternative |
|---|---|---|---|
| Framework | Astro 5 | Standardmäßig statisch (0 JS Basis), Komponenten, astro:assets für Bilder, Deployment = dist/ hochladen | Next.js (Overkill für Landingpages, komplexeres Deployment), reines HTML (keine Komponenten, keine Optimierung) |
| Styling | Tailwind CSS v4 | Eigene Tokens via @theme in CSS, keine JS Konfiguration, automatische Bereinigung | UI-Kits (shadcn/DaisyUI/Flowbite → generischer Look), reines CSS (langsam für Iterationen) |
| Animation | GSAP 3.13+ (ScrollTrigger, SplitText) | Branchenstandard für Scroll/Timeline; ab v3.13 sind ALLE Plugins kostenlos | Framer Motion (an React gebunden), AOS (limitiert, wirkt wie eine Vorlage) |
| Smooth Scroll | Lenis | Leicht (~4kb), dokumentierte Integration mit ScrollTrigger | Locomotive Scroll (schwerer, weniger gewartet) |
| Deployment | Netlify / Cloudflare Pages / Vercel | Repository verbinden → Push → Deployment; statischer Output ohne Server | VPS (unnötig für statische Seiten) |
Harte Regel: Keine UI-Komponentenbibliotheken installieren. Das Design ist eigenständig – genau das unterscheidet diese Skill von einer Vorlage.
Arbeitsablauf (obligatorisch, in dieser Reihenfolge)
Beginne NIE mit dem Code. Eine Landingpage ohne Briefing ist eine Vorlage mit einem anderen Namen.
- Briefing — fülle assets/brief-template.md MIT dem Benutzer aus. Fehlen Ziel, Zielgruppe oder CTA: FRAGE, bevor du fortfährst.
- Designrichtung — folge references/design-direction.md: Persönlichkeit → Typografie → Farbe → Layout → visuelle Signatur. Setze sie in assets/design-tokens.css um.
- Abschnittsarchitektur — definiere den narrativen Bogen (Tabelle unten) und die Copy der Überschriften vor dem Layout.
- Bau — Abschnitt für Abschnitt, Mobile-First (zuerst mit 390px). Animationen gemäß references/animation-recipes.md.
- Audit — Übergabe-Checkliste (unten). Keine Übergabe ohne Bestehen.
- Deployment — statischer Build + Hosting (Befehle unten).
Narrativer Bogen (Basisstruktur)
| # | Abschnitt | Aufgabe |
|---|---|---|
| 1 | Hero | Wertversprechen in <5s verständlich + primärer CTA |
| 2 | Problem / Kontext | Nennt den Schmerz, den der Besucher erkennt |
| 3 | Lösung / Vorteile | Wie du es löst – Vorteile, nicht Funktionen |
| 4 | Sozialer Beweis | Echte Testimonials, Logos, Metriken |
| 5 | Wie es funktioniert | Schritte, Demo, Screenshots |
| 6 | Einwände | FAQ, Garantie, Preise |
| 7 | Finaler CTA | Wiederholt die GLEICHE eindeutige Aktion des Hero |
Passe Abschnitte an, verschmelze oder entferne sie je nach Briefing – nicht jede Landingpage benötigt alle 7.
Kritische Muster
- Eine einzige Conversion: Die gesamte Seite drängt auf EINE Aktion. Zwei verschiedene CTAs = schlecht gemachtes Briefing.
- Wirklich Mobile-First: Design und Bau erfolgen zuerst bei 390px; Desktop ist die Weiterentwicklung, nicht umgekehrt.
- LCP unantastbar: Das LCP-Element (Überschrift oder Bild des Hero) wird nie auf
opacity: 0in CSS gesetzt. Eintritte erfolgen mitgsap.from()(ohne JS wird die Seite vollständig angezeigt) und dauern insgesamt ≤ 1s. prefers-reduced-motion: JEDE Animation lebt innerhalb vongsap.matchMedia(). Keine Ausnahmen.- Minimale Inseln: JS nur dort, wo echte Interaktion stattfindet. Ein FAQ-Akkordeon ist
<details>, keine hydrierte Komponente. - Bilder: Immer
astro:assets(<Image>), AVIF/WebP, explizite Dimensionen,loading="lazy"außer beim Hero. - Schriftarten: Selbst gehostet (lokales woff2 oder Fontsource),
font-display: swap, maximal 2 Familien, Preload der Display-Schrift.
Checkliste vor der Übergabe
- Lighthouse Mobile ≥ 95 bei Performance, Accessibility und SEO
- CLS = 0 (Dimensionen bei Bildern, Schrift-Fallback angepasst)
- Animationen deaktiviert mit
prefers-reduced-motion: reduce - Kontrast AA: 4,5:1 Text, 3:1 große UI
- Tastaturnavigation, Fokus sichtbar, nur ein
h1 - Meta Description, OG Tags, Favicon, eindeutiger Titel
- Getestet bei 390px, 768px und 1440px
- Markentest: Wird das Logo abgedeckt, könnte die Seite von einem anderen Unternehmen stammen? Wenn ja → zurück zu Phase 2
Befehle
# Projekt erstellen
pnpm create astro@latest meine-landing -- --template minimal --typescript strict
cd meine-landing
pnpm astro add tailwind
pnpm add gsap lenis
# Entwicklung und Build
pnpm dev
pnpm build && pnpm preview
# Deployment (wähle eines; bei Netlify/Vercel/Cloudflare: build "pnpm build", output "dist")
npx wrangler pages deploy dist # Cloudflare Pages direkt
npx netlify deploy --prod --dir=dist # Netlify direkt
Ressourcen
- Vorlagen: assets/brief-template.md — Planungsfragebogen; assets/design-tokens.css — Basis des eigenen Designsystems (Tailwind v4
@theme) - Leitfäden: references/design-direction.md — Anti-generische Kunstrichtung; references/animation-recipes.md — GSAP/ScrollTrigger/Lenis Rezepte, bereit zur Anpassung