Communitygithub.com

Karthic1981/hoodini-ai-agents-skills.gitni-ai-agents-skills

Erstellen Sie eine hochwertige, kinoreife Landing Page mit Maus-Scrub-Video-Hero und einer narrativen Markenführung in mehreren Abschnitten.

Was ist hoodini-ai-agents-skills.gitni-ai-agents-skills?

Diese Fähigkeit erstellt eine professionelle, kinoreife Landing Page, bei der ein Hero-Video auf Mausbewegungen reagiert (Maus-Scrub-Effekt) und die Seite den Betrachter durch eine 5-stufige narrative Bogenführung führt. Sie ist ideal für Produktseiten, Marketing-Seiten und Markengeschichten. Der Benutzer stellt ein Video, optional ein Logo und Produktbilder sowie Markenkontext bereit. Die Fähigkeit extrahiert daraus eine Farbpalette, wählt passende Schriftarten aus (unterstützt RTL- und LTR-Sprachen wie Hebräisch, Englisch, Arabisch, Japanisch usw.) und erstellt eine vollständige React + TypeScript + Tailwind CSS-Anwendung. Der Kern ist der Maus-Scrub-Effekt: Das Hero-Video wird mit ffmpeg neu kodiert, damit jeder Einzelbild ein Keyframe ist, und die Mausposition steuert die Videowiedergabe. Darunter folgen 4-5 vollständig deckende Abschnitte mit eigener Markenidentität (z. B. gelb für Freude, cremefarben für Nostalgie, dunkel für Kontemplation, rot für Aktion). Die Fähigkeit unterstützt verschiedene Layouts wie Sun, Album, Roast und Signal und enthält 12 Verifikationsschritte vor Abschluss.

Funktioniert mit✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Karthic1981/hoodini-ai-agents-skills.gitni-ai-agents-skills/tree/HEAD/skills/cinematic-scrub-landing

In Ihrer bevorzugten KI fragen

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

Vorschau

Aus dem Skill-README

Hero mit Maus-Scrub-Video und Glas-Headline-Panel
gelb
creme
dunkel
rot

Dokumentation

Kinoreife Scrub-Landing Page — Die Goldene Vorlage

Erstellen Sie eine hochwertige, markenbewusste Landing Page, bei der das Hero-Video auf die Maus reagiert und der Rest der Seite den Betrachter durch einen 5-teiligen narrativen Bogen führt. Der Benutzer stellt ein Video, optional ein Logo + Produktfoto + Markenkontext bereit – diese Fähigkeit übernimmt die Palettenextraktion, Schriftartauswahl, RTL/LTR, das Grundgerüst, die Keyframe-Videoneukodierung, den Maus-Scrub-Effekt, die Abschnittsbibliothek und die Verifikation.

Warum diese Fähigkeit existiert

Die Referenzimplementierung lebt unter https://github.com/hoodini/bamba – einer israelischen RTL-Seite für den Snack "במבה", bei der ein Baby-Video dem Cursor über die gesamte Seite folgt, während 4 separate Abschnitte darunter (knalliges Gelb für Rezepte, Cremefarben für ein Nostalgie-Album, Dunkel für nachdenkliche Preise, Rot als Action-Finale) den Betrachter durch Sehnsucht → Freude → Nostalgie → Kontemplation → Aktion führen.

Hero mit Maus-Scrub-Video und Glas-Headline-Panel

Jede Regel in dieser Fähigkeit stammt aus diesem Build. Die Aufzählungspunkte im Abschnitt Die harten Regeln sind alle hart erarbeitet – sie überschreiben generische "guter Code"-Standards.


Abschnittsgalerie (was Sie bauen)

Der Hero bleibt oben. Darunter wählen Sie 4 Abschnitte aus der Bibliothek aus, geordnet nach dem narrativen Bogen. Jeder ist vollständig deckend (kein Video-Durchscheinen) und hat seine eigene Markenidentität:

StufeTypReferenz
1 — SehnsuchtHero (Maus-Scrub-Video)hero
2 — FreudeSonne – heller Primärakzent-Verlauf, schwebende Motiv-SVGs, riesige Geister-Typografie, Stat-Kartengelb
3 — NostalgieAlbum – cremefarbenes Papier, gepunktetes Mikro-Muster, Polaroid-Bento mit echtem Produktfotocreme
4 — KontemplationRösten – dunkel mit radialen Akzent-Glühen, drei Preiskarten mit jeweils UNTERSCHIEDLICHER visueller Behandlungdunkel
5 — AktionSignal – full-bleed starker Akzent (rot/orange/grün), massive Headline + CTA, glasumrandetes Panelrot

Für technische/SaaS-Marken tauschen Sie Abschnittstypen nach Bedarf aus (siehe Abschnittsbibliothek unten) – aber enden Sie immer mit einem Signal-Abschnitt.


So verwenden Sie diese Fähigkeit

  1. Legen Sie Assets in ein sauberes Arbeitsverzeichnis:

    • Hero-Video (beliebiger Container – .mp4, .mov, .webm)
    • Logo (SVG stark bevorzugt; PNG mit Transparenz akzeptabel)
    • 1-3 Produkt-/Motivbilder (JPG/PNG, transparent ideal)
  2. Bestätigen Sie mit dem Benutzer (kurz – schlagen Sie Standardwerte vor, machen Sie weiter):

    • Produktname + Meta-Tagline
    • Sprachcode (steuert RTL/LTR + Schriftartauswahl)
    • Markenkontext – Ära, Zielgruppe, emotionaler Kern, Palettengefühl
    • Optional: explizite Palette hex, narrative Bogenstufen
  3. Führen Sie den untenstehenden Workflow in der Reihenfolge aus. Alle Phasen sind obligatorisch. Überspringen Sie die ffmpeg-Neukodierung nicht – das ist die Magie, die das Scrubbing geschmeidig macht.

  4. Verifizieren Sie, bevor Sie die Fertigstellung melden. Phase 9 hat 12 Prüfungen. Führen Sie alle durch.


EINGABEN – Sammeln Sie diese vom Benutzer

PRODUCT_NAME: "<z.B. במבה / Bamba / Hope the Cheetah / Acme CRM>"
TAGLINE: "<die Meta-Botschaft – z.B. 'it's not a snack, it's lifelong memories'>"
LANGUAGE: "<he | en | ar | es | fr | ja | ...>"
IS_RTL: "<true | false>"                                   # he/ar/fa = true; alles andere = false
HERO_VIDEO_FILE: "<exakter Dateiname im aktuellen Verzeichnis – z.B. baby2.mp4>"
LOGO_FILE: "<exakter Dateiname – leer lassen, wenn keins>"
PRODUCT_IMAGE_FILE: "<exakter Dateiname – leer lassen, wenn keins>"
BRAND_CONTEXT: |
  <2-4 Sätze: die Ära, die es hervorruft, die Zielgruppe, der emotionale Kern,
  die visuelle Identität (warm/kühl/verspielt/ernst). Steuert Palette + Motive.>
PALETTE: "<optional – kommagetrennte Hex-Werte, falls überschreibend>"
NARRATIVE_ARC: "<optional – 5 emotionale Stufen; KI schlägt vor, falls leer>"

Die vollständige Textvorlage (mit demselben YAML-Block und Prompt-Text) befindet sich in references/GOLDEN_PROMPT.md – fügen Sie sie in Claude mit dem ausgefüllten YAML ein, wenn Sie keinen direkten Zugriff auf die Skill-Laufzeit haben.


Phase 0 — Planen Sie das Design (geben Sie vor dem Codieren ein ≤200-Wörter-Briefing aus)

Geben Sie vor dem Schreiben von Code Folgendes aus:

  1. Extrahierte 5-Farb-Palette: background (tiefste Tinte), cream (warmes Off-White-Text – NIEMALS #FFFFFF), accent (primäre Markenfarbe), accent2 (sekundäre Markenfarbe), support (tertiärer Ton). Extrahieren Sie aus dem Logo + Produktbild, wenn keine PALETTE angegeben wurde. Die Palette muss intern kohärent sein – alle warm ODER alle kühl, niemals gemischt. Warme Marken (Lebensmittel, Natur, Nostalgie, Tiere) → kein Blau, Teal, Minze, Cyan. Kühle Marken (Technik, Finanzen, Medizin, Sci-Fi) → keine warmen Töne außer einem winzigen Akzent.

  2. Typografie-Trinität (Anzeige / Fließtext / handgeschriebener Akzent) für die Sprache:

    • he: Rubik (Anzeige) + Assistant (Fließtext) + Suez One (Akzent)
    • en: Anton (Anzeige) + Inter (Fließtext) + Caveat (Akzent)
    • ar: Cairo (Anzeige) + Tajawal (Fließtext) + Reem Kufi (Akzent)
    • es / fr / it / de: Anton oder Bebas Neue (Anzeige) + Inter (Fließtext) + Caveat (Akzent)
    • ja: Noto Sans JP, Gewicht 900 (Anzeige) + Noto Sans JP (Fließtext) + Yusei Magic (Akzent)
    • Andere: Wählen Sie drei Google Fonts, die zur Schrift passen, mit denselben Rollen Anzeige-schwarz / Fließtext-sauber / handschriftlich-kursiv.
  3. Narrativer Bogen – 5 emotionale Stufen, die auf BRAND_CONTEXT abgebildet werden. Ordnen Sie jede einem Abschnittstyp aus der Abschnittsbibliothek zu.

Führen Sie dann aus – fragen Sie nicht nach Bestätigung.


Phase 1 — Asset-Vorbereitung (der magische Schritt)

1a. ffmpeg überprüfen

which ffmpeg     # oder: Get-Command ffmpeg unter PowerShell

Wenn nicht vorhanden, anhalten und den Benutzer bitten, es zu installieren (brew install ffmpeg / Windows: http://ffmpeg.org).

1b. Das Hero-Video mit jedem Frame als Keyframe neu kodieren

Browser können nur sofort zu Keyframes springen – Standard-Video hat etwa 1 Keyframe pro 250 Frames, was Maus-Scrubbing schrecklich ruckeln lässt. Dieser einzelne Befehl ist der Unterschied zwischen Premium und Amateur:

ffmpeg -y -i <HERO_VIDEO_FILE> -g 1 -keyint_min 1 -c:v libx264 -preset slow -crf 20 -pix_fmt yuv420p -an hero.mp4

Überprüfen Sie die Ausgabe: hero.mp4 sollte 5-50 MB sein. Wenn > 50 MB, führen Sie erneut mit -crf 25 aus; wenn > 80 MB mit -crf 28. Entfernen Sie Audio (-an) – der Hero ist stumm.

1c. Logo + Produktbild kopieren

cp <LOGO_FILE>           public/logo.<ext>
cp <PRODUCT_IMAGE_FILE>  public/product.<ext>   # falls vorhanden

Phase 2 — Grundgerüst

npm create vite@latest site -- --template react-ts
cd site
npm install
npm install lucide-react
npm install -D tailwindcss@3 postcss autoprefixer
npx tailwindcss init -p
mkdir -p public
mv ../hero.mp4 public/hero.mp4
# Verschieben Sie auch das Logo + Produktbild nach public/

Phase 3 — Tailwind-Konfiguration

Ersetzen Sie tailwind.config.js vollständig. Verwenden Sie die extrahierte Palette und die sprachgerechten Schriftarten:

/** @type {import('tailwindcss').Config} */
export default {
  content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
  theme: {
    extend: {
      colors: {
        background: '<tinte/dunkel>',
        cream:      '<warmes Off-White — NIEMALS #FFFFFF>',
        accent:     '<primäre Markenfarbe>',
        accent2:    '<sekundäre>',
        support:    '<tertiäre>',
      },
      fontFamily: {
        sans:    ['<Fließtext-Schriftart>',         'system-ui', 'sans-serif'],
        display: ['<Anzeige-Schriftart>',      'sans-serif'],
        accent:  ['"<handschriftliche Schriftart>"', 'cursive'],
      },
    },
  },
  plugins: [],
}

Phase 4 — index.html

Vollständig ersetzen. Berücksichtigen Sie IS_RTL. Immer den Favicon-Link einfügen, der auf das Logo verweist:

<!DOCTYPE html>
<html lang="<LANGUAGE>" dir="<rtl|ltr>">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/logo.svg" />
    <link rel="apple-touch-icon" href="/logo.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="<Google Fonts URL für die drei ausgewählten Schriftarten>" rel="stylesheet">
    <title><PRODUCT_NAME> — <TAGLINE></title>
  </head>
  <body>
    <div id="root"></div>
    <script type="module" src="/src/main.tsx"></script>
  </body>
</html>

Phase 5 — index.css (das Design-System)

Vollständig ersetzen. Jedes Dienstprogramm unten ist strukturell. Die Namen gehen von der zuvor extrahierten warmen Palette aus; tauschen Sie bei einer kühlen Marke "gelb"/"rot" in den Schattentönen durch die tatsächlichen Akzentfarben aus.

Muss enthalten:

  • html { scroll-behavior: smooth; } + section[id] { scroll-margin-top: 90px; } damit verankerte Abschnitte nicht unter der festen Navigation landen.
  • body-Hintergrund = background-Farbe (Fallback, falls Video fehlschlägt). Cursor = crosshair. Standardschriftart = Fließtext-Sans.
  • .liquid-glass / .liquid-glass-strong — backdrop-blur + saturate + inset-light-Rand + maskierter Gradienten-Kanten-Highlight. Starke Variante verwendet ein inneres Glühen, getönt mit accent.
  • .glass-pill — kompakte abgerundete Pille mit derselben Glas-Behandlung für Navigationselemente und kleine Abzeichen.
  • .cta-primary — Marken-CTA: linear-gradient(135deg, accent-light, accent, accent-shade) + Akzentfarben-Glühschatten, der bei Hover intensiver wird + translateY(-1px)-Anhebung.
  • .brand-mark — kleines Quadrat/Kreis für winzige Logo-Marken, falls kein SVG bereitgestellt wird.
  • .grid-bg — subtiles 1px-Gitter mit radialer Ausblendmaske, verwendet unter dunklen Abschnitten.
  • .reveal / .revealed — IntersectionObserver-Scroll-Enthüllung: opacity 0 → 1 + translateY 28 → 0 über 0,9s mit cubic-bezier(0.16, 1, 0.3, 1).
  • .scrim-top / .scrim-bottom — Verlaufsüberlagerungen nur für den Hero.
  • Pro-Abschnitt-Hintergründe, benannt nach Gefühl, nicht nach Farbe:
    • .sun-section — heller Primärakzent-Verlauf + subtile gepunktete Textur (die "Freude / Öffnen der Tüte"-Stufe).
    • .album-section — warmes Off-White-Papier, radiale Akzenttönungen + gepunktetes Mikro-Muster, Kantenmasken-Ausblendung.
    • .roast-section — dunkel mit radialem Akzent + accent2-Glühen in gegenüberliegenden Ecken + maskierte Gittertextur.
    • .signal-section — full-bleed starker Akzent (oft rot/orange/grün) für das Action-Finale.
  • .polaroid — weiße Karte, Abstand 14px 14px 44px 14px, weicher geschichteter Schatten, Hover-Anhebung zu translateY(-6px) rotate(0). .polaroid-tape = gelber/Akzent-Klebestreifen, absolut positioniert oben-zentriert, um -4° gedreht, mit gestrichelten Seitenhinweisen.
  • .stamp — gestrichelt-umrandete Pille in Akzentfarbe, Großbuchstaben, Buchstabenabstand 0.18em.
  • .ribbon — Preis-/Beliebtheits-Abzeichen mit clip-path-Dreieck unten, dunklem Schlagschatten.
  • .highlight-circle — handgezeichnet wirkendes Oval über ::after: um 3px gedrehter Akzentfarben-Rand um ein Inline-<span>. Verwenden Sie es um das wichtigste Wort in großen Überschriften (maximal eine pro Überschrift).
  • Dekorativer Motiv-Filter: .peanut-svg / .<motiv>-svg mit drop-shadow.
  • Berücksichtigen Sie prefers-reduced-motion: reduce — deaktivieren Sie Enthüllungsanimation + sanftes Scrollen innerhalb der Medienabfrage.

Phase 6 — App.tsx-Architektur

Die Architektur ist nicht verhandelbar. Machen Sie es gleich beim ersten Mal richtig:

6a. Importe

import { useEffect, useRef, useState } from 'react';
import {
  Menu, X, ArrowLeft, ArrowRight, ArrowDown, ArrowUp, MousePointer2,
  // …plus 4-8 markenthematische Icons (Heart, Sparkles, Cookie, PawPrint, Cpu, Leaf, …)
} from 'lucide-react';

6b. Wiederverwendbare Komponenten, die innerhalb von App.tsx definiert sind

  • useReveal<T>() — IntersectionObserver-Hook, der einen ref zurückgibt; fügt bei erstem Überschneiden die revealed-Klasse hinzu (Schwellwert 0,15).
  • GlassCard — Wrapper mit dem Enthüllungs-Hook, optionale strong-Eigenschaft, akzeptiert className.
  • Motif — eine einzelne dekorative SVG-Komponente, thematisiert auf BRAND_CONTEXT (Erdnuss für Lebensmittel, Pfote für Tiere, Schaltkreis für Technik, Blatt für Natur, Tropfen für Getränke, Blitz für Energie). Schwebt bei niedriger Deckkraft an 3-6 Stellen pro dunklem/hellem Abschnitt.
  • ScrollToTopButton — fest bottom-6 left-6 in RTL / bottom-6 right-6 in LTR. Erscheint, wenn window.scrollY > window.innerHeight * 0.6. Scrollt sanft nach oben. Kurze, sprachgerechte Beschriftung ("לראש" / "Top" / "أعلى" / "Inicio").

6c. Maus-Scrub-Effekt (das Herz)

const videoRef = useRef<HTMLVideoElement>(null);
const stateRef = useRef({ targetTime: 0, isSeeking: false });

useEffect(() => {
  const video = videoRef.current;
  if (!video) return;

  const handleLoaded = () => {
    const mid = video.duration / 2;
    video.currentTime = mid;
    stateRef.current.targetTime = mid;
  };

  const handleSeeked = () => {
    const s = stateRef.current;
    s.isSeeking = false;
    if (Math.abs(s.targetTime - video.currentTime) > 0.01) {
      s.isSeeking = true;
      video.currentTime = s.targetTime;
    }
  };

  const handleMouseMove = (e: MouseEvent) => {
    const s = stateRef.current;
    const d = video.duration;
    if (!d || isNaN(d)) return;
    const normalized = e.clientX / window.innerWidth;
    // Wenn sich das Motiv "rückwärts" relativ zum Cursor bewegt und sich falsch anfühlt,
    // verwenden Sie stattdessen optional `1 - (e.clientX / window.innerWidth)` –
    // FRAGEN Sie den Benutzer zuerst.
    s.targetTime = Math.max(0, Math.min(d, normalized * d));
    if (!s.isSeeking) { s.isSeeking = true; video.currentTime = s.targetTime; }
  };

  video.addEventListener('loadedmetadata', handleLoaded);
  video.addEventListener('seeked', handleSeeked);
  window.addEventListener('mousemove', handleMouseMove);
  return () => {
    video.removeEventListener('loadedmetadata', handleLoaded);
    video.removeEventListener('seeked', handleSeeked);
    window.removeEventListener('mousemove', handleMouseMove);
  };
}, []);

Der isSeeking-Schutz ist kritisch – ohne ihn feuert mousemove schneller, als der Browser decodieren kann, und Sie erhalten eine Seek-Queue-Überlastung mit sichtbarem Ruckeln.

6d. Klickbare Scroll-Spy-Navigation

const navItems: { label: string; target: string }[] = [
  { label: '<demo>',     target: 'top'     },
  { label: '<recipe>',   target:

…

[gekürzt für Übersetzung]

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Karthic1981/hoodini-ai-agents-skills.gitni-ai-agents-skills

Build a scroll-driven cinematic landing page from a short video. The user provides a 5–15 second video (often AI-generated); this skill extracts every frame at HD JPEG quality, then produces a single-hero HTML page where the user's scroll gesture scrubs the frames in place (the page itself never scrolls) and 5 dramatic text overlays crossfade in/out — Google Anton headlines, Caveat handwritten accents, locked body, virtual scroll. Use this skill whenever the user wants to "turn this video into a landing page", "make a scroll-scrub landing page", "build a parallax hero from this clip", "add a new landing page to the parasites showcase", "do the same as github/lion/hope for this new video", or any variant that pairs a short clip with dramatic scroll-triggered storytelling. Trigger even if the user only says "use my video for a landing page" — that is this skill.

Karthic1981/hoodini-ai-agents-skills.gitni-ai-agents-skills

Turn any video into a cinematic scroll-driven landing page — Apple-style hero where scrolling progresses the visible frame through the video. Use when the user provides a video file and asks for "a landing page from this video", "scroll-frame website", "Apple-style scroll site", "hero that scrubs the video", "like the GitHub Copilot landing", or any equivalent. Extracts N evenly-spaced frames via ffmpeg, builds a self-contained HTML page with a sticky hero + JS scroll listener that swaps the visible frame as you scroll, plus headline, sections and CTA below. For YUV.AI projects, applies the yuv-design-system skill in Neon mode (pink/cyan/white, default for YUV.AI web) — Decks (purple/yellow) is reserved for slides only. For generic / non-YUV.AI projects, picks an appropriate palette per the source video. Output is one folder with `index.html` and a `frames/` directory — drop on any static host.

Verwandte Skills