Communitygithub.com

anubhavg-icpl/vibe

Frontend-Entwicklungsskill für React-, Next.js-, TypeScript- und Tailwind-CSS-Anwendungen. Verwenden Sie ihn beim Erstellen von React-Komponenten, Optimieren der Next.js-Leistung, Analysieren der Bundle-Größe, Erstellen von Frontend-Projekten, Implementieren von Barrierefreiheit oder Überprüfen der Frontend-Codequalität.

Was ist vibe?

Dieser Skill, 'vibe' von anubhavg-icpl, ist ein umfassendes Werkzeug für die Frontend-Entwicklung, das sich auf moderne Webtechnologien wie React, Next.js, TypeScript und Tailwind CSS konzentriert. Er bietet automatisierte Arbeitsabläufe für das Erstellen von Projekten (Scaffolding), das Generieren von Komponenten mit Tests und Storybook-Geschichten, die Analyse der Bundle-Größe zur Optimierung der Leistung sowie Referenzen zu React-Mustern und Next.js-Optimierungstechniken. Der Skill unterstützt die Profilerstellung für verschiedene Anwendungsfälle (z. B. Next.js App Router, Vite SPA) und erzwingt die Angabe von Annahmen wie Zielgerät, LCP-Ziel, SEO-Anforderungen und WCAG-Stufe, bevor Empfehlungen ausgesprochen werden. Er ist als Koordinator konzipiert, der für spezifische Aufgaben wie Barrierefreiheitsaudits oder Performance-Profiling in spezialisierte Skills verzweigt, und eignet sich daher für Entwickler, die qualitativ hochwertige, performante und barrierefreie Frontends effizient erstellen möchten. Die SKILL.md-Dokumentation enthält detaillierte Anleitungen und CLI-Befehle, die direkt in Umgebungen wie Claude Code, Cursor oder Codex ausgeführt werden können.

Funktioniert mit~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/anubhavg-icpl/vibe/tree/HEAD/skills/rezvani-senior-frontend

In Ihrer bevorzugten KI fragen

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

Dokumentation

Senior Frontend (Senior Frontend-Entwickler)

Frontend-Entwicklungsmuster, Leistungsoptimierung und Automatisierungstools für React/Next.js-Anwendungen.

Inhaltsverzeichnis


Projekt-Gerüstbau (Project Scaffolding)

Erstellen Sie ein neues Next.js- oder React-Projekt mit TypeScript, Tailwind CSS und Best-Practice-Konfigurationen.

Arbeitsablauf: Neues Frontend-Projekt erstellen

  1. Führen Sie den Gerüstbauer mit Ihrem Projektnamen und der Vorlage aus:

    python scripts/frontend_scaffolder.py my-app --template nextjs
    
  2. Fügen Sie optionale Funktionen hinzu (auth, api, forms, testing, storybook):

    python scripts/frontend_scaffolder.py dashboard --template nextjs --features auth,api
    
  3. Navigieren Sie zum Projekt und installieren Sie die Abhängigkeiten:

    cd my-app && npm install
    
  4. Starten Sie den Entwicklungsserver:

    npm run dev
    

Optionen des Gerüstbauers

OptionBeschreibung
--template nextjsNext.js 14+ mit App Router und Serverkomponenten
--template reactReact + Vite mit TypeScript
--features authNextAuth.js-Authentifizierung hinzufügen
--features apiReact Query + API-Client hinzufügen
--features formsReact Hook Form + Zod-Validierung hinzufügen
--features testingVitest + Testing Library hinzufügen
--dry-runDateien in der Vorschau anzeigen, ohne sie zu erstellen

Generierte Struktur (Next.js)

my-app/
├── app/
│   ├── layout.tsx        # Root-Layout mit Schriftarten
│   ├── page.tsx          # Startseite
│   ├── globals.css       # Tailwind + CSS-Variablen
│   └── api/health/route.ts
├── components/
│   ├── ui/               # Button, Input, Card
│   └── layout/           # Header, Footer, Sidebar
├── hooks/                # useDebounce, useLocalStorage
├── lib/                  # utils (cn), Konstanten
├── types/                # TypeScript-Schnittstellen
├── tailwind.config.ts
├── next.config.js
└── package.json

Komponentengenerierung

Generieren Sie React-Komponenten mit TypeScript, Tests und Storybook-Geschichten.

Arbeitsablauf: Eine neue Komponente erstellen

  1. Generieren Sie eine Client-Komponente:

    python scripts/component_generator.py Button --dir src/components/ui
    
  2. Generieren Sie eine Serverkomponente:

    python scripts/component_generator.py ProductCard --type server
    
  3. Generieren Sie mit Test- und Story-Dateien:

    python scripts/component_generator.py UserProfile --with-test --with-story
    
  4. Generieren Sie einen benutzerdefinierten Hook:

    python scripts/component_generator.py FormValidation --type hook
    

Optionen des Generators

OptionBeschreibung
--type clientClient-Komponente mit 'use client' (Standard)
--type serverAsynchrone Serverkomponente
--type hookBenutzerdefinierter React-Hook
--with-testTestdatei einschließen
--with-storyStorybook-Geschichte einschließen
--flatIm Ausgabeverzeichnis ohne Unterverzeichnis erstellen
--dry-runVorschau ohne Dateien zu erstellen

Beispiel einer generierten Komponente

'use client';

import { useState } from 'react';
import { cn } from '@/lib/utils';

interface ButtonProps {
  className?: string;
  children?: React.ReactNode;
}

export function Button({ className, children }: ButtonProps) {
  return (
    <div className={cn('', className)}>
      {children}
    </div>
  );
}

Bundle-Analyse

Analysieren Sie package.json und die Projektstruktur auf Optimierungsmöglichkeiten für die Bundle-Größe.

Arbeitsablauf: Bundle-Größe optimieren

  1. Führen Sie den Analyzer für Ihr Projekt aus:

    python scripts/bundle_analyzer.py /pfad/zum/projekt
    
  2. Überprüfen Sie den Gesundheitswert und die Probleme:

    Bundle-Gesundheitswert: 75/100 (C)
    
    SCHWERE ABHÄNGIGKEITEN:
      moment (290KB)
        Alternative: date-fns (12KB) oder dayjs (2KB)
    
      lodash (71KB)
        Alternative: lodash-es mit Tree-Shaking
    
  3. Wenden Sie die empfohlenen Korrekturen an, indem Sie schwere Abhängigkeiten ersetzen.

  4. Führen Sie den Befehl erneut mit dem ausführlichen Modus aus, um Importmuster zu überprüfen:

    python scripts/bundle_analyzer.py . --verbose
    

Interpretation des Bundle-Scores

PunktzahlNoteAktion
90-100ABundle ist gut optimiert
80-89BKleinere Optimierungen verfügbar
70-79CSchwere Abhängigkeiten ersetzen
60-69DMehrere Probleme benötigen Aufmerksamkeit
0-59FKritische Bundle-Größenprobleme

Erkannte schwere Abhängigkeiten

Der Analyzer identifiziert diese häufigen schweren Pakete:

PaketGrößeAlternative
moment290KBdate-fns (12KB) oder dayjs (2KB)
lodash71KBlodash-es mit Tree-Shaking
axios14KBNative fetch oder ky (3KB)
jquery87KBNative DOM-APIs
@mui/materialGroßshadcn/ui oder Radix UI

React-Muster

Referenz: references/react_patterns.md

Zusammengesetzte Komponenten (Compound Components)

Teilen Sie den Zustand zwischen verwandten Komponenten:

const Tabs = ({ children }) => {
  const [active, setActive] = useState(0);
  return (
    <TabsContext.Provider value={{ active, setActive }}>
      {children}
    </TabsContext.Provider>
  );
};

Tabs.List = TabList;
Tabs.Panel = TabPanel;

// Verwendung
<Tabs>
  <Tabs.List>
    <Tabs.Tab>Eins</Tabs.Tab>
    <Tabs.Tab>Zwei</Tabs.Tab>
  </Tabs.List>
  <Tabs.Panel>Inhalt 1</Tabs.Panel>
  <Tabs.Panel>Inhalt 2</Tabs.Panel>
</Tabs>

Benutzerdefinierte Hooks

Extrahieren Sie wiederverwendbare Logik:

function useDebounce<T>(value: T, delay = 500): T {
  const [debouncedValue, setDebouncedValue] = useState(value);

  useEffect(() => {
    const timer = setTimeout(() => setDebouncedValue(value), delay);
    return () => clearTimeout(timer);
  }, [value, delay]);

  return debouncedValue;
}

// Verwendung
const debouncedSearch = useDebounce(searchTerm, 300);

Render-Props

Teilen Sie die Rendering-Logik:

function DataFetcher({ url, render }) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch(url).then(r => r.json()).then(setData).finally(() => setLoading(false));
  }, [url]);

  return render({ data, loading });
}

// Verwendung
<DataFetcher
  url="/api/users"
  render={({ data, loading }) =>
    loading ? <Spinner /> : <UserList users={data} />
  }
/>

Next.js-Optimierung

Referenz: references/nextjs_optimization_guide.md

Server- vs. Client-Komponenten

Verwenden Sie standardmäßig Serverkomponenten. Fügen Sie 'use client' nur hinzu, wenn Sie Folgendes benötigen:

  • Ereignishandler (onClick, onChange)
  • Zustand (useState, useReducer)
  • Effekte (useEffect)
  • Browser-APIs
// Serverkomponente (Standard) - kein 'use client'
async function ProductPage({ params }) {
  const product = await getProduct(params.id);  // Serverseitiger Fetch

  return (
    <div>
      <h1>{product.name}</h1>
      <AddToCartButton productId={product.id} />  {/* Client-Komponente */}
    </div>
  );
}

// Client-Komponente
'use client';
function AddToCartButton({ productId }) {
  const [adding, setAdding] = useState(false);
  return <button onClick={() => addToCart(productId)}>Hinzufügen</button>;
}

Bildoptimierung

import Image from 'next/image';

// Oberhalb des Falzes (above the fold) – sofort laden
<Image
  src="/hero.jpg"
  alt="Held"
  width={1200}
  height={600}
  priority
/>

// Responsives Bild mit fill
<div className="relative aspect-video">
  <Image
    src="/product.jpg"
    alt="Produkt"
    fill
    sizes="(max-width: 768px) 100vw, 50vw"
    className="object-cover"
  />
</div>

Datenabrufmuster (Data Fetching Patterns)

// Paralleles Abrufen
async function Dashboard() {
  const [user, stats] = await Promise.all([
    getUser(),
    getStats()
  ]);
  return <div>...</div>;
}

// Streaming mit Suspense
async function ProductPage({ params }) {
  return (
    <div>
      <ProductDetails id={params.id} />
      <Suspense fallback={<ReviewsSkeleton />}>
        <Reviews productId={params.id} />
      </Suspense>
    </div>
  );
}

Barrierefreiheit und Testen

Referenz: references/frontend_best_practices.md

Checkliste für Barrierefreiheit

  1. Semantisches HTML: Verwenden Sie passende Elemente (<button>, <nav>, <main>)
  2. Tastaturnavigation: Alle interaktiven Elemente fokussierbar
  3. ARIA-Labels: Stellen Sie Labels für Symbole und komplexe Widgets bereit
  4. Farbkontrast: Mindestens 4,5:1 für normalen Text
  5. Fokusindikatoren: Sichtbare Fokuszustände
// Barrierefreier Button
<button
  type="button"
  aria-label="Dialog schließen"
  onClick={onClose}
  className="focus-visible:ring-2 focus-visible:ring-blue-500"
>
  <XIcon aria-hidden="true" />
</button>

// Skip-Link für Tastaturnutzer
<a href="#main-content" className="sr-only focus:not-sr-only">
  Zum Hauptinhalt springen
</a>

Teststrategie

// Komponententest mit React Testing Library
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';

test('Button löst Aktion bei Klick aus', async () => {
  const onClick = vi.fn();
  render(<Button onClick={onClick}>Klick mich</Button>);

  await userEvent.click(screen.getByRole('button'));
  expect(onClick).toHaveBeenCalledTimes(1);
});

// Barrierefreiheit testen
test('Dialog ist barrierefrei', async () => {
  render(<Dialog open={true} title="Bestätigen" />);

  expect(screen.getByRole('dialog')).toBeInTheDocument();
  expect(screen.getByRole('dialog')).toHaveAttribute('aria-labelledby');
});

Kurzreferenz

Häufige Next.js-Konfiguration

// next.config.js
const nextConfig = {
  images: {
    remotePatterns: [{ hostname: "cdnexamplecom" }],
    formats: ['image/avif', 'image/webp'],
  },
  experimental: {
    optimizePackageImports: ['lucide-react', '@heroicons/react'],
  },
};

Tailwind-CSS-Hilfsprogramme

// Bedingte Klassen mit cn()
import { cn } from '@/lib/utils';

<button className={cn(
  'px-4 py-2 rounded',
  variant === 'primary' && 'bg-blue-500 text-white',
  disabled && 'opacity-50 cursor-not-allowed'
)} />

TypeScript-Muster

// Props mit children
interface CardProps {
  className?: string;
  children: React.ReactNode;
}

// Generische Komponente
interface ListProps<T> {
  items: T[];
  renderItem: (item: T) => React.ReactNode;
}

function List<T>({ items, renderItem }: ListProps<T>) {
  return <ul>{items.map(renderItem)}</ul>;
}

Ressourcen

  • React-Muster: references/react_patterns.md
  • Next.js-Optimierung: references/nextjs_optimization_guide.md
  • Best Practices: references/frontend_best_practices.md
  • Forcing-Question-Bibliothek (Matt Pocock grill): references/forcing_questions.md
  • Zusammensetzungskarte (in welchen Spezialisten abgezweigt werden soll): references/composition_map.md

Annahmen und überprüfbare Erfolgskriterien (Karpathy-Disziplin)

Bevor dieser Skill eine Komponente erstellt, ein Framework empfiehlt oder ein Bundle prüft, MÜSSEN die folgenden vier Annahmen genannt werden.

  1. Primäres Benutzergerät + Netzwerk — mobile-4G, desktop-fiber, low-end-Android oder corporate-network. Treibt jede Leistungsentscheidung.
  2. LCP-Ziel in Millisekunden — eine einzelne Zahl, nicht „schnell“. Treibt das Bundle-Budget und die Rendering-Wahl.
  3. SEO-abhängig vs. auth-geschützt — treibt das Rendering (SSR/SSG/RSC vs. SPA).
  4. WCAG-Ziel + benannter a11y-Verantwortlicher — AA, AAA oder Best-Effort. Treibt die a11y-Investition und CI-Gates.

Überprüfbare Erfolgskriterien (Karpathy #4) — jede Empfehlung muss Folgendes enthalten:

  • Core Web Vitals-Ziele (LCP, INP, CLS) bei p75 auf dem primären Gerät
  • Ein JS-Bundle-Budget pro Route in KB-gzip
  • Ein Lighthouse-a11y-Mindestwert + Leistungs-Mindestwert

Wenn eines dieser drei Dinge nicht angegeben ist, ist die Empfehlung unvollständig – kehren Sie zu Q2 der Forcing-Question-Bibliothek zurück.

Das Tool scripts/frontend_decision_engine.py kodiert diese Prüfungen: Es weigert sich, ein Profil ohne die vier Annahmeeingaben zu empfehlen und gibt die überprüfbaren Schwellenwerte für das passende Profil aus.


Anpassungsprofile

Vier integrierte Profile in profiles/ kalibrieren jede Empfehlung:

ProfilWann auswählenLCP-Ziel (mobile-4G p75)Bundle-Budget
next-app-routerSaaS kundenorientiert, SEO + dynamisch, RSC-first2000ms150 KB-gzip / Route
remix-or-sveltekitMobile-4G primär, low-JS-first, progressive enhancement1500ms80 KB-gzip / Route
vite-spaAuth-geschützte App, Desktop/Corporate primär2500ms200 KB init + 80 KB / Route
astro-or-staticMarketing / Docs / Blog, nahezu null Schreibvorgänge, SEO-kritisch1200ms30 KB JS / Seite

Wählen Sie ein Profil über:

python scripts/frontend_decision_engine.py \
  --primary-device mobile-4g --lcp-target-ms 2000 \
  --seo-dependent true --auth-walled false --team-size 5

Das Tool gibt das am besten passende Profil, den Zweitplatzierten (innerhalb von 15%), die Stack-Auswahl, die zu vermeidenden Anti-Patterns für dieses Profil und die erforderlichen CI-Gates zurück.

Um ein benutzerdefiniertes Profil hinzuzufügen (z. B. die Standardeinstellungen Ihres Unternehmens für interne Tools): Kopieren Sie profiles/vite-spa.json nach profiles/<ihr-unternehmen>.json und passen Sie constraints + success_thresholds an.


Zusammensetzungskarte (Composition Map)

Dieser Skill implementiert NICHT den Aufgabenbereich, der den POWERFUL-Spezialisten gehört. Er zweigt in sie ab. Siehe references/composition_map.md für die vollständige Routing-Tabelle. Wichtige Abzweigungen:

AnliegenAbzweigen in
WCAG-Audit, Kontrast, Screenreaderengineering-team/skills/a11y-audit/
Bundle-Profiling + Laufzeitleistungengineering/skills/performance-profiler/
Filmische / Scroll-Storytelling-Landingpageengineering-team/skills/epic-design/
Apple HIG (iOS / macOS / visionOS)product-team/skills/apple-hig-expert/
Pre-Commit Karpathy-Reviewengineering/karpathy-coder/
Pre-Flight Architektur-Grillengineering/grill-me/

Der Agent cs-frontend-engineer orchestriert diese Abzweigungen über context: fork. Rufen Sie ihn von einem anderen Agenten mit Agent({subagent_type: "cs-frontend-engineer", prompt: "..."}) oder über /cs:frontend-rev auf.

Individual skills in this repo

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

anubhavg-icpl/vibe

|. Use when you need help with 8 bit orbit video template. Hyperframes-based video template for retro pixel deck motion design. Use when users want a high-fidelity, multi-scene HTML-to-video composition with advanced transitions, interactive preview controls, and ready-to-render default style.

anubhavg-icpl/vibe

Reference DESIGN.md for luxury automotive editorial that needs to feel engineered. White slabs, full-bleed performance photography, BMW corporate blue rising into a deeper blue at active states, restrained Helvetica-grade typography. Use when building UI components, applying design tokens, or implementing visual styles for cinematic bmw.

anubhavg-icpl/vibe

Reference DESIGN.md for enterprise-AI brands that need to feel premium, dark, and quietly futuristic. Ink canvas, Unica grotesque type, saturated coral-to-violet brand gradient deployed as backdrop and accent rule, full-pill buttons, gen. Use when building UI components, applying design tokens, or implementing visual styles for cinematic cohere.

anubhavg-icpl/vibe

Reference DESIGN.md for performance brands that need to feel theatrical. High-contrast black-and-white frames cut by Rosso Corsa red, sharp 0-radius components, FerrariSans across the entire page, photography that treats the car as sculp. Use when building UI components, applying design tokens, or implementing visual styles for cinematic ferrari.

anubhavg-icpl/vibe

Reference DESIGN.md for hyper-luxury that needs to feel forged. True-black canvas, oversized LamboType nameplates at 120px+, hexagonal angle motifs, single warm-gold accent for primary actions, photography lit like a vault. Use when building UI components, applying design tokens, or implementing visual styles for cinematic lamborghini.

anubhavg-icpl/vibe

Reference DESIGN.md for AI-lab cinematic: pure black canvas, neon-lime accent on charcoal chrome, geometric DM Sans / Outfit type, pill-shaped CTAs. Use when building UI components, applying design tokens, or implementing visual styles for cinematic minimax.

anubhavg-icpl/vibe

Reference DESIGN.md for GPU-vendor cinematic: chrome-black canvas, signature green action, video-led hero, hard-edged grotesque headlines. Use when building UI components, applying design tokens, or implementing visual styles for cinematic nvidia.

anubhavg-icpl/vibe

Skill for discovering and researching autonomous AI agents, tools, and ecosystems using the AgentFolio directory. Use when you need help with agentfolio.

anubhavg-icpl/vibe

Build content-focused websites with Astro — zero JS by default, islands architecture, multi-framework components, and Markdown/MDX support. Use when you need help with astro.

anubhavg-icpl/vibe

Expert in building portfolios that actually land jobs and clients -. Use when you need help with interactive portfolio. not just showing work, but creating memorable experiences. Covers developer portfolios, designer portfolios, creative portfolios, and portfolios that convert visitors into opportunities.

anubhavg-icpl/vibe

Generates high-converting Next.js/React landing pages with Tailwind CSS. Uses PAS, AIDA, and BAB frameworks for optimized copy/components (Heroes, Features, Pricing). Focuses on Core Web Vitals/SEO. Use when you need help with landing page generator.

anubhavg-icpl/vibe

Generate walkthrough videos from Stitch projects using Remotion with smooth transitions, zooming, and text overlays. Use when you need help with remotion.

anubhavg-icpl/vibe

Writes complete, structured landing pages optimized for SEO ranking, AEO citation, and visitor conversion. Activate when the user wants to write or generate a landing page for a product, service, or offer.

anubhavg-icpl/vibe

Project scaffolding - generate boilerplate for common project types with best-practice defaults. Use for: scaffold, boilerplate, template, new project, init, create project, starter, setup, project structure, directory structure, monorepo, microservice, API template, web app template, CLI tool template, library template.

anubhavg-icpl/vibe

Automate Klipfolio tasks via Rube MCP (Composio). Always search tools first for current schemas. Use when you need help with klipfolio automation.

anubhavg-icpl/vibe

>. Use when you need help with kami landing. Produce a print-grade single-page kami (紙 / 纸) document — warm parchment canvas, ink-blue accent, serif at one weight, no italic, no cool grays. The output reads like a professional white paper or studio one-pager, not an app UI. Multilingual by design (EN · zh-CN · ja). One self-contained HTML file, zero dependencies.

anubhavg-icpl/vibe

>. Use when you need help with open design landing deck. Produce a single-file slide deck in the Atelier Zero visual language (warm-paper background, italic-serif emphasis spans, coral terminating dots, surreal collage plates) — Open Design's brand deck recipe. The deck uses **horizontal magazine-style swipe pagination** (←/→, wheel, swipe), a per-slide chrome strip with brand mark and slide counter, an ESC overview grid, a coral progress bar, and inherits the canonical stylesheet + 16-slot image library from the sister `open-design-landing` skill.

anubhavg-icpl/vibe

>. Use when you need help with open design landing. Produce a world-class single-page editorial landing site in the Atelier Zero visual language (Monocle / Apartamento / Études editorial collage) — the same aesthetic Open Design uses for its own marketing surface. The agent fills a typed `inputs.json` from a brand brief, optionally generates 16 collage assets via gpt-image-2, then runs a pure-function composer that emits a self-contained HTML file; a separate path can mirror the Astro marketing site in `apps/landing-page/`. Drop-in scroll-reveal motion and a Headroom-style sticky nav are wired automatically.

anubhavg-icpl/vibe

>. Use when building UI with epic design language and visual style. Build immersive, cinematic 2.5D interactive websites using scroll storytelling, parallax depth, text animations, and premium scroll effects — no WebGL required. Use this skill for any web design task: landing pages, product sites, hero sections, scroll animations, parallax, sticky sections, section overlaps, floating products between sections, clip-path reveals, text that flies in from sides, words that light up on scroll, curtain drops, iris opens, card stacks, bleed typography, and any site that should feel cinematic or premium. Trigger on phrases like "make it feel alive", "Apple-style animation", "sections that overlap", "product rises between sections", "immersive", "scrollytelling", or any scroll-driven visual effect. Covers 45+ techniques across 8 categories. Always inspects, judges, and plans assets before coding. Use aggressively for ANY web design task.

anubhavg-icpl/vibe

Generates high-converting landing pages as complete Next.js/React (TSX) components with Tailwind CSS. Creates hero sections, feature grids, pricing tables, FAQ accordions, testimonial blocks, and CTA sections using proven copy frameworks (PAS, AIDA, BAB). Outputs SEO meta tags, structured data, and performance-optimised code targeting Core Web Vitals (LCP < 1s, CLS < 0.1). Use when the user asks to create a landing page, marketing page, homepage, single-page site, lead capture page, campaign page, promo page, or conversion-optimised web page — or when they want to A/B test landing page variants or replace a static page with one designed to convert.

Verwandte Skills