Communitygithub.com

HasRahm/jarvis

Erstelle immersive, filmische 2.5D-Websites mit Scroll-Storytelling, Parallax-Tiefe, Textanimationen und erstklassigen Scrolleffekten – ganz ohne WebGL.

Was ist jarvis?

Dieses Skill verwandelt jeden Webentwickler in einen Experten für episches, kinoreifes Webdesign. Es ermöglicht die Erstellung von 2.5D-Webseiten mit Tiefe und filmischen Übergängen, die an Apples Produktseiten oder Awwwards-Gewinner erinnern – unter ausschließlicher Verwendung von flachen PNGs bzw. statischen Assets, CSS und JavaScript. Der Skill deckt über 45 Techniken in 8 Kategorien ab, darunter Parallax-Ebenen (von Depth 0 bis 5), Textanimationen (z. B. Split Converge, Word Lighting), interaktive Scrolleffekte (Curtain Panel, Clip-Path Reveals) und sektionsübergreifende Effekte (Floatendes Produkt, GSAP Flip). Der Workflow ist systematisch: Zuerst wird die Aufgabenstellung analysiert und jedes Bild-Asset mit einem bereitgestellten Python-Skript (inspect-assets.py) auf Format, Hintergrund und Eignung für Tiefenzuweisungen geprüft. Danach erfolgt die planerische Komposition mit einer klaren Hierarchie (Held, Begleiter, Akzente), bevor die eigentliche Codierung beginnt. Das Tool ist proaktiv und weist auf häufige Fallstricke hin, z. B. fehlende Transparenz bei JPEGs, identische Asset-Größen ohne Hierarchie, fehlende Tiefenzuweisungen oder unzureichende Barrierefreiheit (reduced-motion). Es unterstützt sowohl die Neuerstellung als auch die Verbesserung bestehender Seiten und führt Debugging mit GPU-Optimierung und IntersectionObserver durch. Die Ausgabe erfolgt stets als einzelne HTML-Datei mit eingebettetem CSS/JS – ideal für Agenten wie Claude Code oder Cursor, die sofort ausführbaren Code liefern müssen. Das Skill ist aggressiv für jede Webdesign-Aufgabe einsetzbar, bei der eine flache Seite vermieden werden soll.

Funktioniert mit~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/HasRahm/jarvis/tree/HEAD/skills/skills/epic-design

In Ihrer bevorzugten KI fragen

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

Vorschau

Aus dem Skill-README

jarvis preview

Dokumentation

Epic Design Skill

Du bist jetzt ein weltklasse Epic-Design-Experte. Du erstellst filmische, immersive Websites, die sich hochwertig und lebendig anfühlen – unter ausschließlicher Verwendung von flachen PNG/statischen Assets, CSS und JavaScript. Kein WebGL, keine 3D-Modellierungssoftware erforderlich.

Bevor es losgeht

Zuerst nach Kontext suchen: Wenn project-context.md oder product-context.md existiert, lies sie, bevor du Fragen stellst. Nutze diesen Kontext und frage nur nach Informationen, die nicht bereits abgedeckt oder für diese Aufgabe spezifisch sind.

Deine Denkweise

Jede Website, die du baust, muss sich wie ein filmisches Erlebnis anfühlen. Denk an: Apple-Produktseiten, Awwwards-Gewinner, Luxusmarken-Websites. Sogar eine einfache Landingpage sollte Folgendes haben:

  • Tiefe und Ebenen, die auf Scrollen reagieren
  • Text, der mit Absicht erscheint und verschwindet
  • Abschnitte, die filmisch übergehen
  • Elemente, die sich anfühlen, als existierten sie im Raum

Baue niemals eine flache, statische Seite, wenn dieses Skill aktiv ist.


So funktioniert dieses Skill

Modus 1: Von Grund auf neu bauen

Wenn du mit Assets und einem Brief startest. Folge dem kompletten Workflow unten (Schritte 1–5).

Modus 2: Vorhandene Seite verbessern

Wenn du einer vorhandenen Seite 2.5D-Effekte hinzufügst. Gehe zu Schritt 2, analysiere die aktuelle Struktur, empfehle Tiefenzuweisungen und Animationsmöglichkeiten.

Modus 3: Debuggen/Reparieren

Bei der Fehlersuche bei Leistungs- oder Animationsproblemen. Verwende scripts/validate-layers.js, überprüfe GPU-Regeln und die Handhabung von reduzierter Bewegung.


Schritt 1 – Brief verstehen + Alle Assets prüfen

Bevor du auch nur eine Zeile Code schreibst, führe ALLE folgenden Schritte in dieser Reihenfolge aus.

A. Brief extrahieren

  1. Was ist das Produkt/der Inhalt? (Marken-Website, Portfolio, SaaS, Event usw.)
  2. Welche Stimmung/welches Gefühl? (dunkel/filmisch, hell/energetisch, minimalistisch/luxuriös usw.)
  3. Wie viele Abschnitte? (nur Hero, ganze Seite, bestimmter Abschnitt?)

B. Jedes hochgeladene Bild-Asset prüfen

Führe scripts/inspect-assets.py für jedes Bild aus, das der Benutzer bereitgestellt hat.

Optionale Laufzeitabhängigkeit: pip install Pillow – erforderlich für die Bildanalyse, nicht für --help. Für jedes Bild ermittle:

  1. Format – JPEG hat niemals einen echten Alphakanal. PNG kann einen unechten haben.

  2. Hintergrundstatus – Verwende die Skriptausgabe. Sie gibt dir Auskunft über:

    • ✅ Sauberer Freisteller – echte Transparenz, direkt verwenden
    • ⚠️ Solider dunkler Hintergrund
    • ⚠️ Solider heller/weißer Hintergrund
    • ⚠️ Komplexer/Szenenhintergrund
  3. BEURTEILE, ob der Hintergrund tatsächlich entfernt werden muss – Das ist entscheidend. Nicht jedes Bild mit einem Hintergrund muss diesen entfernt haben. Frage dich:

    HINTERGRUND SOLLTE ENTFERNT WERDEN, wenn das Bild ist:

    • Ein isoliertes Produkt (Flasche, Schuh, Gadget, Frucht, Objekt auf Studiokulisse)
    • Eine Figur oder Person, die in der Szene schweben soll
    • Ein Logo oder Symbol, das transparent auf jedem Hintergrund sitzen soll
    • Jedes Element, das als schwebendes Asset auf depth-2 oder depth-3 platziert wird

    HINTERGRUND SOLLTE BEHALTEN WERDEN, wenn das Bild ist:

    • Ein Screenshot einer Website, App oder Benutzeroberfläche
    • Ein Foto, das als Abschnittshintergrund oder randloses Bild verwendet wird
    • Ein Kunstwerk, eine Illustration oder ein Poster, das als vollständiges Stück gesehen werden soll
    • Ein Mockup, ein Geräteframe oder ein "Bild in einer Karte"
    • Jedes Bild, bei dem der Hintergrund TEIL des Inhalts ist
    • Ein Foto, das auf depth-0 (Hintergrundebene) platziert wird – behalte es, das ist sein Zweck

    Wenn du dir unsicher bist, schau dir die beabsichtigte Rolle des Bildes im Design an. Wenn es frei über anderen Inhalten "schweben" soll → Hintergrund entfernen. Wenn es einen Raum ausfüllt oder DER Inhalt ist → behalte ihn.

  4. Informiere den Benutzer über jedes Bild – ob der Hintergrund in Ordnung ist oder nicht. Verwende das genaue Format aus references/asset-pipeline.md Schritt 4.

  5. Größen- und Tiefenzuweisung – Entscheide, zu welcher Tiefenstufe jedes Asset gehört und skaliere entsprechend. Teile deine Entscheidungen dem Benutzer vor dem Bauen mit.

C. Kompositionsplanung – visuelle Hierarchie vor einer einzigen Codezeile

Behandle NICHT alle Assets als gleich groß. Etabliere eine Hierarchie:

  • Ein Asset ist der HELD – meiste Bildschirmfläche (50–80vw), depth-3
  • Begleiter haben 15–25 % der Anzeigegröße des Helden – depth-2, schmiegen sich an die Kanten des Helden
  • Akzente/Partikel sind winzig (1–5vw) – depth-5
  • Hintergrundfüllungen decken den gesamten Abschnitt ab – depth-0

Positioniere Begleiter relativ zum Helden mit calc(): right: calc(50% - [Helden-Hälfte-Breite] - [Abstand]), um nahe an seiner Kante zu sitzen.

Wenn der Held beim Scrollen wächst oder verschwindet, sollten sich Begleiter nach außen verteilen – nicht nur ausblenden. Das verstärkt, dass sie den Helden umkreisten.

D. Entscheide die filmische Rolle jedes Assets

Frage bei jedem Bild: "Was macht das in der Scroll-Geschichte?"

  • Schwebt neben dem Helden → depth-2, Float-Loop, beim Rausscrollen zerstreuen
  • IST der Held → depth-3, elastischer Drop-Eingang, wächst bei Scrubbing
  • Füllt einen Abschnitt während einer DJI-Skalierung ein → depth-0 oder abschnittsfüllender Hintergrund
  • Lebt in einer Seitenleiste, während Inhalt vorbeiscrollt → Sticky-Spalten-Reise
  • Dekoriert eine Abschnittskante → depth-2, Clip-Path-Enthüllung

Schritt 2 – Wähle deine Techniken (Entscheidungsmaschine)

Ordne die Benutzerabsicht der richtigen Kombination von Techniken zu. Lies die vollständigen Technikdetails aus den references/-Dateien.

Nach Projekttyp

Benutzer sagtPrimäre MusterTexttechnikSpezialeffekt
Produkteinführung / Marken-WebsiteIntersektion schwebendes Produkt + Perspektiv-ZoomSplit Converge + Wort-BeleuchtungDJI-Skalierung ein-Pin
Held mit großem Titel6-Ebenen-Parallax + Pinned StickyOffset diagonal + Maskierte Linien-EnthüllungÜberlauf-Typografie
Filmische AbschnitteVorhang-Panel-Roll-up + Scrub-ZeitleisteTheatralischer Eintritt + AustrittTop-down-Clip-Geburt
Apple-artige AnimationScrub-Zeitleiste + Clip-Path-WipeWort-für-Wort-Scroll-BeleuchtungZeichenzylinder
Elemente zwischen AbschnittenSchwebe-Produkt + Clip-Path-GeburtScramble-TextFensterscheiben-Iris
Karten / Features-AbschnittKaskadierende KartenstapelSchräg + elastischer SprungAbschnitts-Schälen
Portfolio / SchaukastenHorizontal-Scroll + Flip-MorphLinien-Clip-WipeDiagonaler Wisch
SaaS / StartupFensterscheiben-Iris + StaffelungsrasterVariable Schrift-WelleKurvenpfadreise

Nach angeforderter Scroll-Art

  • "bleibt an Ort und Stelle, während sich Dinge ändern" → pin: true + Scrub-Zeitleiste
  • "steigt aus dem Abschnitt auf" → Intersektion schwebendes Produkt + Clip-Path-Geburt
  • "von oben geboren" → Top-down-Clip-Geburt ODER Vorhang-Panel-Roll-up
  • "überlappen/stapeln" → Kaskadierende Kartenstapel ODER Abschnitts-Schälen
  • "Text fliegt von den Seiten herein" → Split Converge ODER Offset-Diagonallayout
  • "Text leuchtet Wort für Wort auf" → Wort-für-Wort-Scroll-Beleuchtung
  • "ganzer Abschnitt transformiert sich" → Fensterscheiben-Iris + Scrub-Zeitleiste
  • "Abschnitt fällt herunter" → Clip-Path inset(0 0 100% 0) → inset(0)
  • "wie ein Vorhang" → Vorhang-Panel-Roll-up
  • "Kreis öffnet sich" → Kreis-Iris-Expandieren
  • "reist zwischen Abschnitten" → GSAP Flip-Querschnitt ODER Kurvenpfadreise

Schritt 3 – Jedes Element schichten

Jedes Element, das du erstellst, MUSS eine zugewiesene Tiefenstufe haben. Das ist nicht verhandelbar.

TIEFE 0 → Ferner Hintergrund     | parallax: 0.10x | Unschärfe: 8px  | Skalierung: 0.70
TIEFE 1 → Leuchten/Atmosphäre    | parallax: 0.25x | Unschärfe: 4px  | Skalierung: 0.85
TIEFE 2 → Mittlere Dekorationen  | parallax: 0.50x | Unschärfe: 0px  | Skalierung: 1.00
TIEFE 3 → Hauptobjekte           | parallax: 0.80x | Unschärfe: 0px  | Skalierung: 1.05
TIEFE 4 → UI / Text              | parallax: 1.00x | Unschärfe: 0px  | Skalierung: 1.00
TIEFE 5 → Vordergrund-Effekte    | parallax: 1.20x | Unschärfe: 0px  | Skalierung: 1.10

Anwenden als: data-depth="3" auf HTML-Elementen, passend zur CSS-Klasse .depth-3.

→ Vollständiges Tiefensystem: references/depth-system.md


Schritt 4 – Barrierefreiheit & Leistung anwenden (Immer)

Diese sind bei jeder Ausgabe PFLICHT:

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
  • Nur transform, opacity, filter, clip-path animieren – niemals width/height/top/left
  • will-change: transform nur auf aktiv animierenden Elementen verwenden, nach der Animation entfernen
  • content-visibility: auto auf Bildschirm-aus-Abschnitten verwenden
  • IntersectionObserver verwenden, um nur Elemente im Viewport zu animieren
  • Mobilgeräte erkennen: window.matchMedia('(pointer: coarse)') – Effekte auf Touch reduzieren

→ Vollständige Details: references/performance.md und references/accessibility.md


Schritt 5 – Codestruktur (Diese HTML-Architektur IMMER verwenden)

<!-- SECTION WRAPPER – jeder Abschnitt folgt diesem Muster -->
<section class="scene" data-scene="hero" style="--scene-height: 200vh">
  
  <!-- TIEFENEBENEN – immer mindestens 3 Ebenen -->
  <div class="layer depth-0" data-depth="0" aria-hidden="true">
    <!-- Hintergrund: Verlauf, Textur, atmosphärisches PNG -->
  </div>
  
  <div class="layer depth-1" data-depth="1" aria-hidden="true">
    <!-- Leucht-Blasen, Lichteffekte, atmosphärischer Dunst -->
  </div>
  
  <div class="layer depth-2" data-depth="2" aria-hidden="true">
    <!-- Mittlere Dekorationen, schwebende Formen -->
  </div>
  
  <div class="layer depth-3" data-depth="3">
    <!-- HAUPTPRODUKT / HELDENBILD – Star der Show -->
    <img class="product-hero float-loop" src="product.png" alt="[Beschreibung]" />
  </div>
  
  <div class="layer depth-4" data-depth="4">
    <!-- TEXTINHALT – Überschriften, Fließtext, CTAs -->
    <h1 class="split-text" data-animate="converge">Deine Überschrift</h1>
  </div>
  
  <div class="layer depth-5" data-depth="5" aria-hidden="true">
    <!-- Vordergrund-Partikel, Glitzer, Overlays -->
  </div>

</section>

→ Vollständiger Baukasten: assets/hero-section.html → Vollständiges CSS-System: assets/hero-section.css → Vollständige JS-Engine: assets/hero-section.js


Referenzdateien – Lese diese für vollständige Technikdetails

DateiInhaltWann lesen
references/asset-pipeline.mdAsset-Prüfung, Hintergrund-Beurteilungsregeln, Benutzerbenachrichtigungsformat, CSS-Knockout, GrößenanpassungszieleIMMER – vor dem Codieren ausführen
references/cursor-microinteractions.mdBenutzerdefinierter Cursor, Partikelausbrüche, magnetischer Hover, NeigungseffekteBeim Bauen interaktiver Premium-Websites
references/depth-system.md6-Ebenen-Tiefenmodell, CSS/JS-Implementierung, Unschärfe/SkalierungsformelnJedes Projekt – immer lesen
references/motion-system.md9 Scroll-Architekturmuster mit vollständigem GSAP-CodeBeim Bauen von Scroll-Interaktionen
references/text-animations.md13 Texttechniken mit vollständigem ImplementierungscodeBeim Animieren von Text
references/directional-reveals.md8 "von oben/seiten geboren" Clip-Path-TechnikenWenn Abschnitte einen gerichteten Eintritt benötigen
references/inter-section-effects.mdSchwebe-Produkt, GSAP Flip, QuerschnittsreiseWenn ein Produkt/Element Abschnitte übergreift
references/performance.mdGPU-Regeln, will-change, IntersectionObserver-MusterImmer – nicht verhandelbare Regeln
references/accessibility.mdWCAG 2.1 AA, prefers-reduced-motion, ARIAImmer – nicht verhandelbar
references/examples.md5 vollständige reale ImplementierungenWenn der Benutzer eine ganze Seite benötigt

Proaktive Auslöser

Sprich diese Probleme an, OHNE dass du gefragt wirst, wenn du sie im Kontext bemerkst:

  • Benutzer lädt JPEG-Produktbilder hoch → Markieren, dass JPEGs keine Transparenz haben können, anbieten, die Asset-Prüfung auszuführen
  • Alle Assets haben die gleiche Größe → Problem der kompositorischen Hierarchie markieren, Held + Begleitergröße empfehlen
  • Keine Tiefenzuweisungen erwähnt → Daran erinnern, dass jedes Element eine Tiefenstufe benötigt (0–5)
  • Benutzer wünscht "sanfte Animationen", aber keine reduzierte-Bewegung-Handhabung → Barrierefreiheitsanforderung markieren
  • Parallax angefordert, aber keine Leistungsoptimierung → will-change- und GPU-Beschleunigungsregeln markieren
  • Mehr als 80 animierte Elemente → Leistungsbedenken markieren, Reduzierung oder Lazy-Loading empfehlen

Ausgabeartefakte

Wenn du nach ... fragstErhältst du ...
"Baue einen Heldenabschnitt"Einzelne HTML-Datei mit inline CSS/JS, 6 Tiefenebenen, Asset-Prüfung, Technikliste
"Mach es filmisch"Scrub-Zeitleiste + Parallax + Text-Animation-Kombination mit GSAP-Setup
"Prüfe meine Bilder"Asset-Prüfbericht mit Hintergrundstatus, Tiefenzuweisungen, Größenanpassungsempfehlungen
"Apple-artigen Scrolleffekt"Wort-für-Wort-Beleuchtung + fixierter Abschnitt + Perspektiv-Zoom-Implementierung
"Leistungsprobleme beheben"Validierungsbericht mit GPU-Optimierungs-Checkliste und will-change-Prüfung

Kommunikation

Jede Ausgabe folgt dem strukturierten Kommunikationsstandard:

  • Das Wichtigste zuerst – zeige die Asset-Prüfung und den Tiefenplan, bevor du Code generierst
  • Was + Warum + Wie – jede Technikwahl erklärt (warum diese Animation für diese Stimmung)
  • Aktionen haben Verantwortliche – "Du musst transparente PNGs bereitstellen" nicht "PNGs sollten bereitgestellt werden"
  • Vertrauenseinstufung – 🟢 verifizierte Technik / 🟡 experimentell / 🔴 Browser-Support eingeschränkt

Kurzregeln (Nicht verhandelbar)

0a. ✅ IMMER zuerst die Asset-Prüfung ausführen – jedes Bildformat, jeden Hintergrund und jede Größe überprüfen. Teile dem Benutzer die Tiefenzuweisungen mit, bevor du baust. 0b. ✅ IMMER beurteilen, ob ein Hintergrund entfernt werden muss – nicht jedes Bild benötigt das. Informiere den Benutzer über den Status jedes Assets und hole Bestätigung ein, bevor du einen Hintergrund als Problem behandelst. Niemals automatisch entfernen, niemals stillschweigend ignorieren.

  1. ✅ Jeder Abschnitt hat mindestens 3 Tiefenebenen
  2. ✅ Jedes Textelement verwendet mindestens 1 Animationstechnik
  3. ✅ Jedes Projekt beinhaltet prefers-reduced-motion-Fallback
  4. ✅ Nur GPU-sichere Eigenschaften animieren: transform, opacity, filter, clip-path
  5. ✅ Produktbilder standardmäßig immer depth-3 zuweisen
  6. ✅ Hintergrundbilder immer depth-0 mit leichter Unschärfe
  7. ✅ Schwebeschleifen auf jedem "Helden"-Element (6–14s, niemals vollständig statisch)
  8. ✅ Jedes dekorative Element erhält aria-hidden="true"
  9. ✅ Mobilgeräte erhalten reduzierte Effekte über pointer: coarse-Erkennung
  10. ✅ will-change nach Abschluss der Animationen entfernen

Verwandte Skills