rbikbov/frontend-starter

Verifica código frontend e documentação em busca de 'neural-slop' antes de commit, PR ou publicação de repositório: resquícios de geradores, opções mortas e inacabadas, afirmações no README e comentários não confirmadas por código, tom de marketing e emojis, abstrações desnecessárias, tratamento frágil de erros, dados pessoais em logs, classes de estilo inexistentes. Use quando pedirem para verificar código ou repositório em busca de 'slop', preparar um projeto para publicação ou apresentação, fazer uma revisão de código escrito por IA, ou antes de commitar uma grande alteração própria.

O que é frontend-starter?

Esta skill (rbikbov/frontend-starter) automatiza a detecção de 'neural-slop' em projetos frontend — padrões de código e documentação que são gerados por IA, mas não têm propósito real ou validação factual. Ela vai além de linters tradicionais ao verificar cada achado com evidências concretas: linhas de código, saída de comandos ou ausência de consumo. A skill suporta revisão de diffs (`git diff`), arquivos específicos ou repositórios inteiros antes de publicação. Ela segue uma lista de verificação abrangente que cobre resquícios de geradores, código morto, documentação incorreta (como README que contradiz o código), tom excessivamente promocional, abstrações desnecessárias, tratamento frágil de erros, vulnerabilidades de segurança e problemas de UI. Ideal para desenvolvedores que querem garantir que seu código não contenha artefatos vazios de geradores de IA, afirmações falsas na documentação ou práticas inseguras antes de compartilhar o projeto. Funciona em qualquer repositório frontend (React, Next.js, etc.) e requer ferramentas como ripgrep (rg) e git.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/rbikbov/frontend-starter/tree/HEAD/.claude/skills/anti-slop-review

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

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

Documentação

Revisão de Neural-Slop

Neural-Slop não é um estilo, mas afirmações que não são confirmadas e código que não tem razão de existir. Cada achado abaixo é verificado com um fato: uma linha de código, a saída de um comando, a ausência de um consumidor. Observações de gosto pessoal e o que um linter pega não entram aqui.

Princípios.

  1. Remover é melhor do que adicionar. Uma opção morta é removida, não documentada; uma frase de marketing é substituída por um fato ou removida.
  2. A afirmação é verificada pelo código, não pela memória. Antes de chamar uma linha do README de falsa ou verdadeira, abra o arquivo ao qual ela se refere.
  3. Um achado sem evidência não é um achado. Se você não pode mostrar file:line ou a saída de um comando — não escreva.
  4. Correções apenas sob solicitação. Por padrão, o resultado da revisão é uma lista.

1. Ordem de trabalho

  1. Determine o escopo: diff (git diff main...HEAD), arquivos específicos ou o repositório inteiro antes da publicação.
  2. Execute a busca da seção 3 — ela fornece candidatos, não achados.
  3. Verifique cada candidato lendo o código e descarte falsos positivos.
  4. Percorra a lista de verificação da seção 2 para o que a busca não pega: README vs código, estados de UI, abstrações.
  5. Se possível executar o aplicativo — olhe as páginas: telas modelo e componentes não estilizados são visíveis imediatamente.
  6. Emita um relatório no formato da seção 4.

2. Lista de verificação

2.1. Resquícios de geradores e modelos

  • Páginas iniciais e blocos de geradores: "Get started by editing", links para documentação do framework e ferramentas, utm_source=…-project, "Give us a star", blocos sobre serviços em nuvem da ferramenta.
  • Arquivos modelo: example.spec.ts, testes que verificam apenas o título do modelo; SVGs e imagens do modelo em public/; README do gerador.
  • Placeholders vazios: .gitkeep em pastas onde já existem arquivos; index.ts vazios; pastas-camada sem código.

2.2. Morto e inacabado

  • Valores de configuração ou ramos switch que lançam "not implemented" / "pending".
  • Enumerações com um único valor que parecem um ponto de extensão (type: "graphql" | "msw", onde msw não é implementado).
  • Código comentado, TODO sem motivo ou link, exportações não utilizadas, dependências em package.json que não são importadas em lugar nenhum.
  • Scripts em package.json que não executam (referenciam arquivos removidos, targets inexistentes).

2.3. Documentação vs código

Cada afirmação do README, ADR, comentários e descrições de commits é verificada:

  • Nomes e caminhos: arquivos, comandos, variáveis de ambiente mencionados existem (next.config.ts no texto e next.config.js no repositório — achado).
  • Comportamento: "as requisições vão diretamente", "tokens não estão acessíveis ao JS", "protegido contra open redirect" — encontre o código que faz isso e verifique os casos limite.
  • Versões e números: versões de bibliotecas, tempo de vida de tokens, cobertura.
  • Futuro no presente: o que está planejado é descrito como já feito.
  • Links e âncoras no Markdown levam para onde deveriam (âncoras quebram ao editar cabeçalhos).

2.4. Tom

  • Palavras avaliativas em vez de fatos: premium, state-of-the-art, cutting-edge, blazing/lightning-fast, seamless, robust, powerful, modern, production-ready, enterprise-grade, "mais do que apenas", "premium", "moderno", "poderoso".
  • Emojis em cabeçalhos de documentação, na UI, em logs e mensagens de commit.
  • "Designed with ❤️", "Carefully crafted", badges por ter badges.
  • Comentários que recontam ("// Obtém o usuário" acima de getUser()), comentários históricos ("// Corrigido", "// Atualizado para X"), comentários em CAPS LOCK, marcações "IMPORTANT" sem explicação.
  • Cabeçalhos e comentários no estilo "🚀 Production Roadmap" e "(Premium Aesthetic)".

Substituição — fato: o que faz, por que é assim, qual a limitação.

2.5. Abstrações desnecessárias

  • Interface ou fábrica com uma única implementação e sem mock nos testes.
  • Camada, zona, pacote de monorepo, gerenciador de estado, Storybook sem consumidor ou sem motivo registrado (ADR, seção do README).
  • Wrappers que apenas renomeiam (useAuthApi = () => useStrictContext(Ctx) sem lógica — aceitável; wrapper sobre wrapper — não).
  • "Para o futuro": parâmetros que ninguém passa, opções de configuração com um único valor.

2.6. Erros e assincronicidade

  • O tipo de erro é determinado pelo texto da mensagem (message === "unauthorized", includes("invalid password")) — sem comentário de motivo e testes.
  • Apenas o primeiro elemento do array de erros é verificado (errors[0]).
  • throw { status, ... } — objeto em vez de Error.
  • catch vazio, catch retornando dados vazios, .catch(() => {}).
  • Promise in-flight compartilhada cujo resultado os esperadores não leem (refresh de token "esperamos, depois repetimos" sem verificar se foi bem-sucedido).
  • error.message do servidor é mostrado ao usuário como está.
  • Estados de carregamento, erro, lista vazia ausentes.

2.7. Segurança e privacidade

  • Dados pessoais em logs: email, telefone, nome; tokens; corpos de requisições.
  • Segredos no repositório ou no histórico (git log -p), .env no índice, segredos com prefixo NEXT_PUBLIC_.
  • Redirecionamentos por parâmetro (callbackUrl, next, returnTo) sem verificação, ou com verificação apenas startsWith("/")/!startsWith("//") — permite /\.com e caracteres de controle.
  • Tokens em localStorage/sessionStorage; token na URL que não é removido da barra de endereços após a leitura.
  • dangerouslySetInnerHTML sem sanitizador.

2.8. UI

  • Classes que não existem no tema: tokens copiados do shadcn/ui (bg-card, text-muted-foreground, bg-primary) em um projeto sem esses tokens — componente silenciosamente sem estilos.
  • Valores HEX brutos e valores arbitrários em componentes quando existem tokens.
  • Estado "campo preenchido" definido em onChange: quebra com autopreenchimento e reset().
  • key={index} em listas mutáveis; botões sem type dentro de formulários; botões-ícone sem aria-label.
  • SVG do layout com filtros (sombras, brilho) cortados pelo viewBox — retângulo visível ao redor do logotipo.

2.9. Testes

  • Testes que verificam mocks, não comportamento; snapshots de grandes árvores.
  • e2e contra backend genérico ou de produção, alterando dados.
  • Testes que passam apenas porque jsdom não aplica CSS (elemento "oculto" por classe, mas o teste o encontra), e seletores amplos (/password/i, que também corresponde a "Mostrar senha").

2.10. Git

  • Alterações não relacionadas em um único commit; commit "fix stuff".
  • Arquivos gerados e artefatos de build no índice (exceto cliente de API gerado intencionalmente comitado).
  • Mensagem de commit descreve algo diferente do diff.

3. Busca de candidatos

Comandos fornecem candidatos. Cada correspondência é verificada lendo o código.

# Modelos de geradores e marketing
rg -n -i "utm_source|get started by editing|give us a star|nx cloud|welcome to|carefully crafted|designed with" \
  --glob '!**/node_modules/**' --glob '!*.lock' --glob '!pnpm-lock.yaml'
rg -n -i "premium|state-of-the-art|cutting-edge|blazing|lightning|seamless|robust|enterprise-grade|production-ready|premium|modern|powerful" \
  --glob '!**/node_modules/**'

# Emojis em código, UI e documentação
rg -n --pcre2 '[\x{1F300}-\x{1FAFF}\x{2600}-\x{27BF}]' --glob '!**/node_modules/**' --glob '!*.lock'

# Inacabado
rg -n -i "not implemented|pending implementation|todo|fixme|hack" --glob '!**/node_modules/**'

# Erros frágeis
rg -n "errors\?\.\[0\]|errors\[0\]|message ===|message\.includes|\.includes\(['\"][a-z ]+['\"]\)" src app
rg -n "throw \{" src app
rg -n "catch \{\s*\}|catch \(\w*\) \{\s*\}|\.catch\(\(\) => \{\s*\}\)" src app

# Logs com dados pessoais
rg -n "(logger|console)\.\w+\(.*(email|phone|password|token)" src app

# Redirecionamentos e tokens
rg -n "callbackUrl|returnTo|redirectTo|searchParams.get\(['\"]next" src app
rg -n "localStorage|sessionStorage" src app

# Classes shadcn sem tokens: encontre classes e compare com @theme / configuração tailwind
rg -n -o "\b(bg|text|border)-(card|muted|popover|accent|primary|secondary|destructive)(-foreground)?\b" src app | sort -u

# Dependências e exportações não utilizadas (se knip estiver instalado)
pnpm dlx knip

# Segredos no histórico
git log -p --all | rg -n -i "(api[_-]?key|secret|password|token)\s*[:=]\s*['\"][A-Za-z0-9_\-]{16,}"
git ls-files | rg -n "(^|/)\.env($|\.)" | rg -v "\.env\.example$"

4. Formato do relatório

Achados em ordem decrescente de importância: segurança e privacidade → afirmações falsas na documentação → bugs de tratamento de erros → código morto e inacabado → modelos → tom.

<arquivo>:<linha> — <categoria>
O que: <uma frase: o que está errado, com o fato>
Por que é importante: <consequência para o usuário, revisor ou suporte>
Correção: <específica; na maioria das vezes "remover" ou "substituir pelo fato: …">

No final — o que foi verificado e não gerou achados, e o que não foi verificado (por exemplo, o aplicativo não foi executado). Se não houver achados, diga isso, sem observações forçadas.

Individual skills in this repo

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

rbikbov/frontend-starter

Creates Architecture Decision Records documenting key technical decisions with context, alternatives considered, tradeoffs, consequences, and decision owners. Use when documenting "architecture decisions", "technical choices", "design decisions", or "ADRs".

rbikbov/frontend-starter

Процесс разработки фичи с агентом: PRD с Non-Goals → компактная спецификация → задачи по одной на коммит → read-only исследование → tracer bullet → сборка с тестом сначала → независимое ревью субагентом → проверка в браузере. Использовать, когда просят сделать фичу, экран, пользовательский сценарий или заметное изменение поведения; когда нужно написать PRD, спецификацию или разбить работу на задачи; когда работа больше одного коммита. Не использовать для опечаток и однострочных правок.

rbikbov/frontend-starter

Авторизация и сессия во фронтенде на Next.js (App Router): где хранить токены, BFF на route handlers с HttpOnly-cookie, refresh токена без гонок, определение «не авторизован» (включая GraphQL, который отвечает 200), проверки в proxy.ts и Data Access Layer, безопасный редирект после входа, выход без утечки данных прошлого пользователя, токены в ссылках сброса пароля, формы входа и восстановления. Использовать, когда проектируешь или пишешь вход, регистрацию, восстановление пароля, защищённые страницы, API-клиент с refresh-токеном, или ревьюишь такой код.

rbikbov/frontend-starter

Старт нового фронтенд-проекта на Next.js (App Router) + TypeScript: фундамент, который закладывается до первой фичи. Использовать, когда нужно: создать проект с нуля; решить, нужны ли Next.js, монорепо, BFF, микрофронтенды; разложить FSD поверх роутинга Next; завести строгий TS, линтер границ, env-конфиг, модель ошибок и API-клиент, тесты, git-хуки, CI, каркас README; навести порядок в молодом проекте после генератора.

Habilidades Relacionadas