Communitygithub.com

anubhavg-icpl/vibe

Habilidade de desenvolvimento frontend para aplicações React, Next.js, TypeScript e Tailwind CSS. Use ao construir componentes React, otimizar performance do Next.js, analisar tamanhos de bundle, estruturar projetos frontend, implementar acessibilidade ou revisar qualidade de código frontend.

O que é vibe?

Esta habilidade (skill) capacita o agente a atuar como um engenheiro frontend sênior especializado em ecossistemas React e Next.js. Ela automatiza a criação de projetos (scaffolding) com configurações otimizadas, gera componentes React com testes e histórias Storybook, e realiza análises detalhadas de bundle para identificar dependências pesadas e sugerir alternativas mais leves. Além disso, a skill codifica as melhores práticas para React, como componentes compostos e hooks personalizados, e oferece um guia completo de otimização para Next.js, incluindo o uso correto de Server e Client Components e padrões de busca de dados. Para garantir a qualidade e acessibilidade, a skill inclui um checklist de acessibilidade, estratégias de teste e uma ferramenta de decisão que personaliza recomendações com base em critérios como dispositivo do usuário, meta de LCP e dependência de SEO. A habilidade atua em conjunto com outras especializações (como auditoria de acessibilidade e perfil de performance) através de um mapa de composição, permitindo que o agente delegue preocupações específicas a especialistas mais poderosos e garanta entregas frontend robustas e otimizadas.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Frontend Sênior

Padrões de desenvolvimento frontend, otimização de performance e ferramentas de automação para aplicações React/Next.js.

Índice


Estruturação de Projetos

Gere um novo projeto Next.js ou React com TypeScript, Tailwind CSS e configurações de boas práticas.

Fluxo de Trabalho: Criar Novo Projeto Frontend

  1. Execute o scaffolder com o nome do seu projeto e template:

    python scripts/frontend_scaffolder.py meu-app --template nextjs
    
  2. Adicione funcionalidades opcionais (auth, api, forms, testing, storybook):

    python scripts/frontend_scaffolder.py dashboard --template nextjs --features auth,api
    
  3. Navegue até o projeto e instale as dependências:

    cd meu-app && npm install
    
  4. Inicie o servidor de desenvolvimento:

    npm run dev
    

Opções do Scaffolder

OpçãoDescrição
--template nextjsNext.js 14+ com App Router e Server Components
--template reactReact + Vite com TypeScript
--features authAdiciona autenticação NextAuth.js
--features apiAdiciona React Query + cliente API
--features formsAdiciona React Hook Form + validação Zod
--features testingAdiciona Vitest + Testing Library
--dry-runVisualizar arquivos sem criá-los

Estrutura Gerada (Next.js)

meu-app/
├── app/
│   ├── layout.tsx        # Layout raiz com fontes
│   ├── page.tsx          # Página inicial
│   ├── globals.css       # Tailwind + variáveis CSS
│   └── api/health/route.ts
├── components/
│   ├── ui/               # Button, Input, Card
│   └── layout/           # Header, Footer, Sidebar
├── hooks/                # useDebounce, useLocalStorage
├── lib/                  # utils (cn), constants
├── types/                # Interfaces TypeScript
├── tailwind.config.ts
├── next.config.js
└── package.json

Geração de Componentes

Gere componentes React com TypeScript, testes e histórias Storybook.

Fluxo de Trabalho: Criar um Novo Componente

  1. Gere um componente cliente:

    python scripts/component_generator.py Button --dir src/components/ui
    
  2. Gere um componente servidor:

    python scripts/component_generator.py ProductCard --type server
    
  3. Gere com arquivos de teste e história:

    python scripts/component_generator.py UserProfile --with-test --with-story
    
  4. Gere um hook personalizado:

    python scripts/component_generator.py FormValidation --type hook
    

Opções do Gerador

OpçãoDescrição
--type clientComponente cliente com 'use client' (padrão)
--type serverComponente servidor assíncrono
--type hookHook React personalizado
--with-testIncluir arquivo de teste
--with-storyIncluir história Storybook
--flatCriar no diretório de saída sem subdiretório
--dry-runVisualizar sem criar arquivos

Exemplo de Componente Gerado

'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>
  );
}

Análise de Bundle

Analise o package.json e a estrutura do projeto em busca de oportunidades de otimização de bundle.

Fluxo de Trabalho: Otimizar Tamanho do Bundle

  1. Execute o analisador no seu projeto:

    python scripts/bundle_analyzer.py /caminho/para/o/projeto
    
  2. Revise a pontuação de saúde e os problemas:

    Pontuação de Saúde do Bundle: 75/100 (C)
    
    DEPENDÊNCIAS PESADAS:
      moment (290KB)
        Alternativa: date-fns (12KB) ou dayjs (2KB)
    
      lodash (71KB)
        Alternativa: lodash-es com tree-shaking
    
  3. Aplique as correções recomendadas substituindo dependências pesadas.

  4. Execute novamente com modo verboso para verificar padrões de importação:

    python scripts/bundle_analyzer.py . --verbose
    

Interpretação da Pontuação do Bundle

PontuaçãoNotaAção
90-100ABundle bem otimizado
80-89BOtimizações menores disponíveis
70-79CSubstituir dependências pesadas
60-69DMúltiplos problemas precisam de atenção
0-59FProblemas críticos de tamanho do bundle

Dependências Pesadas Detectadas

O analisador identifica estes pacotes comuns pesados:

PacoteTamanhoAlternativa
moment290KBdate-fns (12KB) ou dayjs (2KB)
lodash71KBlodash-es com tree-shaking
axios14KBFetch nativo ou ky (3KB)
jquery87KBAPIs DOM nativas
@mui/materialGrandeshadcn/ui ou Radix UI

Padrões React

Referência: references/react_patterns.md

Componentes Compostos

Compartilhe estado entre componentes relacionados:

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

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

// Uso
<Tabs>
  <Tabs.List>
    <Tabs.Tab>Um</Tabs.Tab>
    <Tabs.Tab>Dois</Tabs.Tab>
  </Tabs.List>
  <Tabs.Panel>Conteúdo 1</Tabs.Panel>
  <Tabs.Panel>Conteúdo 2</Tabs.Panel>
</Tabs>

Hooks Personalizados

Extraia lógica reutilizável:

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;
}

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

Render Props

Compartilhe lógica de renderização:

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 });
}

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

Otimização Next.js

Referência: references/nextjs_optimization_guide.md

Componentes Servidor vs Cliente

Use Server Components por padrão. Adicione 'use client' apenas quando precisar de:

  • Manipuladores de eventos (onClick, onChange)
  • Estado (useState, useReducer)
  • Efeitos (useEffect)
  • APIs do navegador
// Server Component (padrão) - sem 'use client'
async function ProductPage({ params }) {
  const product = await getProduct(params.id);  // Busca no servidor

  return (
    <div>
      <h1>{product.name}</h1>
      <AddToCartButton productId={product.id} />  {/* Componente cliente */}
    </div>
  );
}

// Componente Cliente
'use client';
function AddToCartButton({ productId }) {
  const [adding, setAdding] = useState(false);
  return <button onClick={() => addToCart(productId)}>Adicionar</button>;
}

Otimização de Imagens

import Image from 'next/image';

// Acima da dobra - carregar imediatamente
<Image
  src="/hero.jpg"
  alt="Hero"
  width={1200}
  height={600}
  priority
/>

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

Padrões de Busca de Dados

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

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

Acessibilidade e Testes

Referência: references/frontend_best_practices.md

Checklist de Acessibilidade

  1. HTML Semântico: Use elementos apropriados (<button>, <nav>, <main>)
  2. Navegação por Teclado: Todos os elementos interativos focalizáveis
  3. Rótulos ARIA: Forneça rótulos para ícones e widgets complexos
  4. Contraste de Cores: Mínimo 4.5:1 para texto normal
  5. Indicadores de Foco: Estados de foco visíveis
// Botão acessível
<button
  type="button"
  aria-label="Fechar diálogo"
  onClick={onClose}
  className="focus-visible:ring-2 focus-visible:ring-blue-500"
>
  <XIcon aria-hidden="true" />
</button>

// Link de pular para usuários de teclado
<a href="#main-content" className="sr-only focus:not-sr-only">
  Pular para o conteúdo principal
</a>

Estratégia de Testes

// Teste de componente com React Testing Library
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';

test('botão dispara ação ao clicar', async () => {
  const onClick = vi.fn();
  render(<Button onClick={onClick}>Clique em mim</Button>);

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

// Teste de acessibilidade
test('diálogo é acessível', async () => {
  render(<Dialog open={true} title="Confirmar" />);

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

Referência Rápida

Configuração Comum do Next.js

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

Utilitários Tailwind CSS

// Classes condicionais com 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'
)} />

Padrões TypeScript

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

// Componente genérico
interface ListProps<T> {
  items: T[];
  renderItem: (item: T) => React.ReactNode;
}

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

Recursos

  • Padrões React: references/react_patterns.md
  • Otimização Next.js: references/nextjs_optimization_guide.md
  • Melhores Práticas: references/frontend_best_practices.md
  • Biblioteca de perguntas forçadas (grill de Matt Pocock): references/forcing_questions.md
  • Mapa de composição (para qual especialista bifurcar): references/composition_map.md

Suposições e Critérios de Sucesso Verificáveis (disciplina Karpathy)

Antes que esta habilidade estruture um componente, recomende um framework ou audite um bundle, as seguintes quatro suposições DEVEM ser explicitadas.

  1. Dispositivo primário do usuário + rede — mobile-4G, desktop-fibra, Android de baixo custo ou rede corporativa. Conduz cada decisão de perf.
  2. Meta de LCP em milissegundos — um único número, não "rápido". Conduz o orçamento do bundle e a escolha de renderização.
  3. Dependente de SEO vs. protegido por autenticação — conduz a renderização (SSR/SSG/RSC vs. SPA).
  4. Meta WCAG + proprietário nomeado de a11y — AA, AAA ou melhor esforço. Conduz o investimento em a11y e os gates de CI.

Critérios de sucesso verificáveis (Karpathy #4) — toda recomendação deve incluir:

  • Metas de Core Web Vitals (LCP, INP, CLS) no p75 no dispositivo primário
  • Um orçamento de bundle JS por rota em KB-gzip
  • Um piso de a11y no Lighthouse + piso de perf

Se qualquer um desses três não for declarado, a recomendação está incompleta — retorne ao Q2 da biblioteca de perguntas forçadas.

A ferramenta scripts/frontend_decision_engine.py codifica essas verificações: ela se recusa a recomendar um perfil sem as quatro entradas de suposição e imprime os limites verificáveis para o perfil correspondente.


Perfis de Personalização

Quatro perfis integrados em profiles/ calibram todas as recomendações:

PerfilQuando escolherMeta LCP (mobile-4G p75)Orçamento de bundle
next-app-routerSaaS voltado para o cliente, SEO + dinâmico, RSC-first2000ms150 KB-gzip / rota
remix-or-sveltekitMobile-4G primário, low-JS-first, aprimoramento progressivo1500ms80 KB-gzip / rota
vite-spaApp protegido por autenticação, desktop/corporativo primário2500ms200 KB init + 80 KB / rota
astro-or-staticMarketing / docs / blog, escrita quase zero, SEO crítico1200ms30 KB JS / página

Escolha um perfil via:

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

A ferramenta retorna o perfil de melhor ajuste, o trade-off do segundo colocado (se dentro de 15%), as escolhas de stack, os anti-padrões a evitar naquele perfil e os gates de CI necessários.

Para adicionar um perfil personalizado (por exemplo, os padrões de ferramenta interna da sua organização): copie profiles/vite-spa.json para profiles/<sua-org>.json e ajuste constraints + success_thresholds.


Mapa de Composição

Esta habilidade NÃO reimplementa o escopo pertencente aos especialistas de nível POWERFUL. Ela bifurca neles. Consulte references/composition_map.md para a tabela de roteamento completa. Bifurcações principais:

PreocupaçãoBifurcar em
Auditoria WCAG, contraste, leitor de telaengineering-team/skills/a11y-audit/
Perfil de bundle + perf em tempo de execuçãoengineering/skills/performance-profiler/
Landing cinematográfica / narrativa com scrollengineering-team/skills/epic-design/
Apple HIG (iOS / macOS / visionOS)product-team/skills/apple-hig-expert/
Revisão Karpathy pré-commitengineering/karpathy-coder/
Grill de arquitetura pré-execuçãoengineering/grill-me/

O agente cs-frontend-engineer orquestra essas bifurcações via context: fork. Invoque-o de outro agente com Agent({subagent_type: "cs-frontend-engineer", prompt: "..."}) ou via /cs:frontend-rev.

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.

Habilidades Relacionadas