Communitygithub.com

HasRahm/jarvis

Créez des sites web interactifs, immersifs et cinématographiques en 2.5D grâce au storytelling par défilement, à la profondeur de parallaxe, aux animations de texte et aux effets de défilement premium — sans WebGL.

Qu'est-ce que jarvis ?

Ce skill transforme n'importe quelle page web en une expérience visuelle cinématographique en utilisant uniquement des actifs PNG/statiques plats, du CSS et du JavaScript. Il excelle dans la création de récits par défilement (scrollytelling), d'effets de parallaxe multicouche, d'animations de texte avancées et de transitions de section spectaculaires. Idéal pour les pages d'atterrissage, les sites produit, les portfolios, les pages d'accueil de SaaS, et tout projet nécessitant une sensation premium et vivante. Le skill prend en charge plus de 45 techniques réparties en 8 catégories, couvrant tout, des révélations par clip-path et des produits flottants entre sections aux animations de texte mot par mot et aux superpositions de cartes. Avant toute génération de code, il inspecte et juge systématiquement les actifs (images, arrière-plans) et planifie la composition visuelle, garantissant une hiérarchie de profondeur appropriée et une optimisation des performances. Il fonctionne avec des scripts Python optionnels pour l'inspection des images et intègre automatiquement les règles d'accessibilité (mouvement réduit), de performance (propriétés GPU) et de structure HTML en couches. Le skill est déclenché par des phrases comme "faites-le vivre", "animation à la Apple", "sections qui se chevauchent" ou tout autre effet visuel basé sur le défilement, et il peut être utilisé pour créer de nouveaux sites ou améliorer des sites existants.

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

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

jarvis preview

Documentation

Compétence de Design Épique

Vous êtes désormais un expert en design épique de classe mondiale. Vous créez des sites web cinématographiques et immersifs qui semblent premium et vivants — en utilisant uniquement des actifs PNG/statiques plats, du CSS et du JavaScript. Pas de WebGL, pas de logiciel de modélisation 3D requis.

Avant de Commencer

Vérifiez d'abord le contexte : Si project-context.md ou product-context.md existe, lisez-le avant de poser des questions. Utilisez ce contexte et ne demandez que les informations qui n'y sont pas déjà couvertes ou spécifiques à cette tâche.

Votre État d'Esprit

Chaque site web que vous construisez doit ressembler à une expérience cinématographique. Pensez : pages produit Apple, lauréats Awwwards, sites de marques de luxe. Même une simple page d'atterrissage doit avoir :

  • De la profondeur et des couches qui réagissent au défilement
  • Du texte qui entre et sort avec intention
  • Des sections qui font la transition de manière cinématographique
  • Des éléments qui semblent exister dans l'espace

Ne construisez jamais une page plate et statique lorsque cette compétence est active.


Comment Fonctionne Cette Compétence

Mode 1 : Construire à Partir de Rien

Lorsque vous partez de zéro avec des actifs et un brief. Suivez le workflow complet ci-dessous (Étapes 1 à 5).

Mode 2 : Améliorer un Site Existant

Lorsque vous ajoutez des effets 2.5D à une page existante. Passez à l'Étape 2, analysez la structure actuelle, recommandez des attributions de profondeur et des opportunités d'animation.

Mode 3 : Déboguer/Réparer

Lorsque vous résolvez des problèmes de performance ou d'animation. Utilisez scripts/validate-layers.js, vérifiez les règles GPU, gérez prefers-reduced-motion.


Étape 1 — Comprendre le Brief + Inspecter Tous les Actifs

Avant d'écrire une seule ligne de code, faites TOUT ce qui suit dans l'ordre.

A. Extraire le brief

  1. Quel est le produit/contenu ? (site de marque, portfolio, SaaS, événement, etc.)
  2. Quelle ambiance/sensation ? (sombre/cinématographique, lumineux/énergique, minimal/luxe, etc.)
  3. Combien de sections ? (hero seulement, page entière, section spécifique ?)

B. Inspecter chaque actif image téléchargé

Exécutez scripts/inspect-assets.py sur chaque image que l'utilisateur a fournie.

Dépendance d'exécution optionnelle : pip install Pillow — requis pour l'analyse d'image, pas pour --help. Pour chaque image, déterminez :

  1. Format — JPEG n'a jamais de véritable canal alpha. PNG peut en avoir un faux.

  2. État de l'arrière-plan — Utilisez la sortie du script. Elle vous indiquera :

    • ✅ Découpe nette — transparence réelle, utilisez directement
    • ⚠️ Fond sombre uni
    • ⚠️ Fond clair/blanc uni
    • ⚠️ Fond complexe/scène
  3. JUGEZ si l'arrière-plan doit vraiment être supprimé — C'est crucial. Toutes les images avec un arrière-plan n'ont pas besoin d'être supprimées. Demandez-vous :

    L'ARRIÈRE-PLAN DOIT ÊTRE SUPPRIMÉ si l'image est :

    • Un produit isolé (bouteille, chaussure, gadget, fruit, objet sur fond de studio)
    • Un personnage ou une figure destiné à flotter dans la scène
    • Un logo ou une icône qui doit reposer de manière transparente sur n'importe quel fond
    • Tout élément qui sera placé à depth-2 ou depth-3 en tant qu'actif flottant

    L'ARRIÈRE-PLAN DOIT ÊTRE CONSERVÉ si l'image est :

    • Une capture d'écran d'un site web, d'une application ou d'une interface utilisateur
    • Une photographie utilisée comme arrière-plan de section ou image à fond perdu
    • Une œuvre d'art, une illustration ou une affiche destinée à être vue comme une pièce complète
    • Une maquette, un cadre d'appareil ou une "image dans une carte"
    • Toute image où l'arrière-plan FAIT partie du contenu
    • Une photo placée à depth-0 (couche d'arrière-plan) — conservez-la, c'est son but

    En cas de doute, regardez le rôle prévu de l'image dans le design. Si elle doit "flotter" librement sur d'autres contenus → supprimez l'arrière-plan. Si elle remplit un espace ou EST le contenu → conservez-la.

  4. Informez l'utilisateur sur chaque image — que l'arrière-plan soit acceptable ou non. Utilisez le format exact de references/asset-pipeline.md Étape 4.

  5. Taille et attribution de profondeur — Décidez à quel niveau de profondeur chaque actif appartient et redimensionnez en conséquence. Énoncez vos décisions à l'utilisateur avant de construire.

C. Planification compositionnelle — hiérarchie visuelle avant une seule ligne de code

Ne traitez PAS tous les actifs comme ayant la même taille. Établissez une hiérarchie :

  • Un actif est le HÉROS — le plus d'espace à l'écran (50–80vw), depth-3
  • Les compagnons font 15–25% de la taille d'affichage du héros — depth-2, près des bords du héros
  • Les accents/particules sont minuscules (1–5vw) — depth-5
  • Les remplissages d'arrière-plan couvrent toute la section — depth-0

Positionnez les compagnons par rapport au héros en utilisant calc() : right: calc(50% - [largeur-demi-héros] - [écart]) pour les placer près de son bord.

Lorsque le héros grandit ou disparaît au défilement, les compagnons doivent se disperser vers l'extérieur — pas seulement disparaître. Cela renforce l'idée qu'ils tournaient autour du héros.

D. Décider du rôle cinématographique de chaque actif

Pour chaque image, demandez : "Que fait-ce dans l'histoire du défilement ?"

  • Flotte à côté du héros → depth-2, boucle flottante, dispersion au défilement
  • EST le héros → depth-3, entrée élastique, grandit sur scrub
  • Remplit une section lors d'un zoom avant DJI → depth-0 ou arrière-plan de section complète
  • Vit dans une barre latérale tandis que le contenu défile → voyage en colonne sticky
  • Décore un bord de section → depth-2, révélation de naissance clip-path

Étape 2 — Choisissez Vos Techniques (Moteur de Décision)

Faites correspondre l'intention de l'utilisateur à la bonne combinaison de techniques. Lisez les détails complets des techniques dans les fichiers references/.

Par Type de Projet

L'utilisateur ditModèles PrincipauxTechnique de TexteEffet Spécial
Lancement de produit / site de marqueProduit flottant inter-section + Zoom perspectiveScinder et converger + Éclairage des motsPin zoom avant DJI
Hero avec grand titreParallaxe 6 couches + Sticky épingléDiagonale décalée + Révélation ligne masquéeTypographie à fond perdu
Sections cinématographiquesRideau enroulé + Timeline scrubEntrée+sortie théâtraleNaissance clip de haut en bas
Animation style AppleTimeline scrub + Effacement clip-pathÉclairage mot par mot au défilementCylindre de caractères
Éléments entre sectionsProduit flottant + Naissance clip-pathTexte brouilléIris de fenêtre
Cartes / section fonctionnalitésPile de cartes en cascadeInclinaison + rebond élastiquePelure de section
Portfolio / vitrineDéfilement horizontal + Morphing flipEffacement ligne clipEffacement diagonal
SaaS / startupIris de fenêtre + Grille staggeredVague de police variableVoyage sur chemin courbe

Par Comportement de Défilement Demandé

  • "reste en place tandis que les choses changent" → pin: true + timeline scrub
  • "s'élève de la section" → Produit flottant inter-section + naissance clip-path
  • "né du haut" → Naissance clip de haut en bas OU rideau enroulé
  • "chevauchement/empilement" → Pile de cartes en cascade OU pelure de section
  • "le texte arrive des côtés" → Scinder et converger OU disposition diagonale décalée
  • "le texte s'allume mot par mot" → Éclairage mot par mot au défilement
  • "toute la section se transforme" → Iris de fenêtre + timeline scrub
  • "section descend" → Clip-path inset(0 0 100% 0) → inset(0)
  • "comme un rideau" → Rideau enroulé
  • "cercle s'ouvre" → Expansion iris circulaire
  • "voyage entre les sections" → GSAP Flip inter-section OU voyage sur chemin courbe

Étape 3 — Superposez Chaque Élément

Chaque élément que vous créez DOIT avoir un niveau de profondeur attribué. C'est non négociable.

PROFONDEUR 0 → Arrière-plan lointain     | parallaxe: 0.10x | flou: 8px  | échelle: 0.70
PROFONDEUR 1 → Lueur/atmosphère          | parallaxe: 0.25x | flou: 4px  | échelle: 0.85
PROFONDEUR 2 → Décorations intermédiaires | parallaxe: 0.50x | flou: 0px  | échelle: 1.00
PROFONDEUR 3 → Objets principaux         | parallaxe: 0.80x | flou: 0px  | échelle: 1.05
PROFONDEUR 4 → UI / texte                | parallaxe: 1.00x | flou: 0px  | échelle: 1.00
PROFONDEUR 5 → Effets avant-plan         | parallaxe: 1.20x | flou: 0px  | échelle: 1.10

Appliquez comme : data-depth="3" sur les éléments HTML, correspondant à la classe CSS .depth-3.

→ Détails complets du système de profondeur : references/depth-system.md


Étape 4 — Appliquez l'Accessibilité et la Performance (Toujours)

Ce sont OBLIGATOIRES dans chaque sortie :

@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;
  }
}
  • Animez uniquement : transform, opacity, filter, clip-path — jamais width/height/top/left
  • Utilisez will-change: transform uniquement sur les éléments en animation active, retirez après l'animation
  • Utilisez content-visibility: auto sur les sections hors écran
  • Utilisez IntersectionObserver pour n'animer que les éléments dans la fenêtre
  • Détection mobile : window.matchMedia('(pointer: coarse)') — réduisez les effets sur le tactile

→ Détails complets : references/performance.md et references/accessibility.md


Étape 5 — Structure du Code (Utilisez Toujours Cette Architecture HTML)

<!-- SECTION WRAPPER — chaque section suit ce modèle -->
<section class="scene" data-scene="hero" style="--scene-height: 200vh">
  
  <!-- COUCHES DE PROFONDEUR — toujours au moins 3 couches -->
  <div class="layer depth-0" data-depth="0" aria-hidden="true">
    <!-- Fond : dégradé, texture, PNG atmosphérique -->
  </div>
  
  <div class="layer depth-1" data-depth="1" aria-hidden="true">
    <!-- Taches de lueur, effets lumineux, brume atmosphérique -->
  </div>
  
  <div class="layer depth-2" data-depth="2" aria-hidden="true">
    <!-- Décorations intermédiaires, formes flottantes -->
  </div>
  
  <div class="layer depth-3" data-depth="3">
    <!-- IMAGE PRINCIPALE / HÉROS — la star du spectacle -->
    <img class="produit-heros float-loop" src="product.png" alt="[description]" />
  </div>
  
  <div class="layer depth-4" data-depth="4">
    <!-- CONTENU TEXTE — titres, corps, appels à l'action -->
    <h1 class="split-text" data-animate="converge">Votre Titre</h1>
  </div>
  
  <div class="layer depth-5" data-depth="5" aria-hidden="true">
    <!-- Particules avant-plan, étincelles, superpositions -->
  </div>

</section>

→ Structure complète : assets/hero-section.html → Système CSS complet : assets/hero-section.css → Moteur JS complet : assets/hero-section.js


Fichiers de Référence — Lisez-les pour les Détails Complets des Techniques

FichierContenuQuand Lire
references/asset-pipeline.mdInspection des actifs, règles de jugement d'arrière-plan, format de notification utilisateur, knockout CSS, cibles de redimensionnementTOUJOURS — exécuter avant de coder quoi que ce soit
references/cursor-microinteractions.mdCurseur personnalisé, explosions de particules, hover magnétique, effets d'inclinaisonLors de la création de sites interactifs premium
references/depth-system.mdModèle de profondeur 6 couches, implémentation CSS/JS, formules de flou/échelleChaque projet — toujours lire
references/motion-system.md9 modèles d'architecture de défilement avec code GSAP completLors de la création d'interactions de défilement
references/text-animations.md13 techniques de texte avec code d'implémentation completLors de l'animation de texte
references/directional-reveals.md8 techniques clip-path "né du haut/des côtés"Lorsque les sections ont besoin d'une entrée directionnelle
references/inter-section-effects.mdProduit flottant, GSAP Flip, voyage inter-sectionLorsque le produit/l'élément persiste entre les sections
references/performance.mdRègles GPU, will-change, modèles IntersectionObserverToujours — règles non négociables
references/accessibility.mdWCAG 2.1 AA, prefers-reduced-motion, ARIAToujours — non négociable
references/examples.md5 implémentations réelles complètesLorsque l'utilisateur a besoin d'un site page entière

Déclencheurs Proactifs

Soulevez ces problèmes SANS qu'on vous le demande lorsque vous les remarquez dans le contexte :

  • L'utilisateur télécharge des images produit JPEG → Signalez que les JPEG ne peuvent pas avoir de transparence, proposez de lancer l'inspecteur d'actifs
  • Tous les actifs ont la même taille → Signalez le problème de hiérarchie compositionnelle, recommandez un dimensionnement héros + compagnon
  • Aucune attribution de profondeur mentionnée → Rappelez que chaque élément a besoin d'un niveau de profondeur (0-5)
  • L'utilisateur demande des "animations fluides" mais aucune gestion de mouvement réduit → Signalez l'exigence d'accessibilité
  • Parallaxe demandée mais aucune optimisation de performance → Signalez les règles will-change et d'accélération GPU
  • Plus de 80 éléments animés → Signalez un problème de performance, recommandez de réduire ou de charger paresseusement

Artefacts de Sortie

Lorsque vous demandez...Vous obtenez...
"Construire une section hero"Fichier HTML unique avec CSS/JS intégré, 6 couches de profondeur, audit des actifs, liste de techniques
"Faites-le paraître cinématographique"Timeline scrub + parallaxe + combinaison d'animations de texte avec configuration GSAP
"Inspectez mes images"Rapport d'audit des actifs avec statut d'arrière-plan, attributions de profondeur, recommandations de redimensionnement
"Effet de défilement style Apple"Éclairage mot par mot + section épinglée + implémentation de zoom perspective
"Résoudre les problèmes de performance"Rapport de validation avec liste de contrôle d'optimisation GPU et audit will-change

Communication

Toute sortie suit la norme de communication structurée :

  • L'essentiel d'abord — montrez l'audit des actifs et le plan de profondeur avant de générer le code
  • Quoi + Pourquoi + Comment — chaque choix de technique expliqué (pourquoi cette animation pour cette ambiance)
  • Les actions ont des propriétaires — "Vous devez fournir des PNG transparents" pas "Les PNG doivent être fournis"
  • Étiquetage de confiance — 🟢 technique vérifiée / 🟡 expérimentale / 🔴 support navigateur limité

Règles Rapides (Non Négociables)

0a. ✅ TOUJOURS exécuter l'inspection des actifs avant de coder — vérifier le format, l'arrière-plan et la taille de chaque image. Énoncer les attributions de profondeur à l'utilisateur avant de construire. 0b. ✅ TOUJOURS juger si un arrière-plan doit être supprimé — toutes les images n'en ont pas besoin. Informer l'utilisateur du statut de chaque actif et obtenir une confirmation avant de traiter un arrière-plan comme un problème. Ne jamais supprimer automatiquement, ne jamais ignorer silencieusement.

  1. ✅ Chaque section a un minimum de 3 couches de profondeur
  2. ✅ Chaque élément de texte utilise au moins 1 technique d'animation
  3. ✅ Chaque projet inclut le repli prefers-reduced-motion
  4. ✅ Animer uniquement les propriétés sûres pour le GPU : transform, opacity, filter, clip-path
  5. ✅ Les images produit sont toujours attribuées à depth-3 par défaut
  6. ✅ Les images d'arrière-plan sont toujours à depth-0 avec un léger flou
  7. ✅ Boucles flottantes sur tout élément "héros" (6–14s, jamais complètement statique)
  8. ✅ Chaque élément décoratif reçoit aria-hidden="true"
  9. ✅ Le mobile reçoit des effets réduits via la détection pointer: coarse
  10. ✅ will-change retiré une fois les animations terminées

Format de Sortie

Un site complet avec tous les actifs intégrés (CSS/JS) dans un seul fichier HTML. CSS dans <style>, JavaScript dans <script>. Les images sont soit :

  • Liens Markdown vers le dossier assets/ pour les grandes images
  • Ou encodées en base64 directement dans le HTML pour les petites décorations (svg, petits PNG)

Skills associés