Communitygithub.com

williamsnieves/landing-factory

Transforma um site de referência público em uma folha de padrões abstrata em patterns/<slug>.md (mapa de seções, tipo de hero, grid e espaçamento, escala tipográfica, paleta em termos genéricos, densidade, inventário de movimento com a técnica por trás de cada efeito, bibliotecas detectadas) sem armazenar nenhum ativo, cópia ou código do site. Use quando o usuário executar /analyze-reference <url> ou pedir para analisar, estudar, detalhar ou extrair padrões de um site de inspiração ou referência para uma landing. Verifica robots.txt e reservas de text-and-data-mining primeiro e aborta se o acesso for negado. Não se destina a clonar ou reconstruir um site.

O que é landing-factory?

Esta skill permite que um agente de IA analise um site de referência público e extraia seus padrões de design abstratos, sem copiar ou armazenar qualquer conteúdo protegido por direitos autorais, como imagens, texto ou código. O objetivo é fornecer uma descrição conceitual da estrutura, movimento e estilo do site, útil para designers e desenvolvedores criarem landings originais inspiradas. A skill suporta plataformas como Claude Code, Cursor e Codex, e funciona verificando o robots.txt e as reservas de mineração de dados, carregando a página com Playwright, capturando screenshots temporários e gerando um arquivo Markdown estruturado. O processo é estritamente não intrusivo: não tenta contornar bloqueios, não faz login e não armazena nada além dos padrões abstratos. A análise inclui mapa de seções, tipografia, paleta de cores, grade, densidade e movimentos, com níveis de confiança para cada detecção.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/williamsnieves/landing-factory/tree/HEAD/.claude/skills/analyze-reference

Perguntar na sua IA favorita

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

Documentação

analyze-reference

Extraia padrões, não clone. Esta skill lê UMA página pública (mais no máximo dois links internos nomeados pelo usuário), descreve como ela é construída e como se move em termos abstratos e escreve patterns/<slug>.md. Nada do site é armazenado: nenhuma imagem, vídeo, 3D, logotipo, texto, código, nomes de fontes de marca ou códigos de cores. Capturas de tela são material de trabalho temporário em .cache/analyze/ (git-ignorado) e são sempre excluídas no final.

Isso é uma orientação para o fluxo de trabalho do próprio repositório, não um aconselhamento jurídico. Consulte um advogado de PI antes de industrializar (veja docs/roadmap.md).

Entradas

  • url (obrigatório): uma página pública http(s). Qualquer coisa atrás de login, paywall ou desafio de bot está fora de escopo.
  • --focus "..." (opcional): o que o usuário gosta no site, em suas próprias palavras. Direciona quais seções da folha recebem profundidade. Registre no frontmatter (none se omitido).
  • Até 2 links internos (opcional, mesmo site): analise cada um com os mesmos passos e mescle em uma única folha. Nunca rastreie além.

Slug: derivado do host (www. removido, pontos para traços, ex.: example-com). Passe --slug para recon.mjs se o usuário nomear um. Se patterns/<slug>.md já existir, pergunte antes de substituir.

Todos os comandos são executados a partir da raiz do repositório. Os scripts ficam em .claude/skills/analyze-reference/scripts/; cada um responde a --help.

Passos

Execute em ordem. O passo 6 (limpeza) é executado independentemente de como os passos 1 a 5 terminam: sucesso, abortamento ou erro. Trate-o como um finally.

1. Verificar permissões (antes de tocar no site com um navegador)

node .claude/skills/analyze-reference/scripts/check-robots.mjs <url>

Ele avalia robots.txt para *, ClaudeBot, anthropic-ai e GPTBot, o cabeçalho X-Robots-Tag, <meta name="robots"> e reservas de mineração de dados (TDMRep: /.well-known/tdmrep.json, cabeçalho e meta tdm-reservation). Códigos de saída: 0 permitido, 1 bloqueado, 2 não é possível verificar.

  • Saída 1 ou 2: PARE. Não produza folha, não execute recon. Informe ao usuário os motivos exatos que o script imprimiu. Saída 2 (5xx, timeout, arquivos ilegíveis) é um abortamento conservador: diga que as permissões não puderam ser verificadas; não tente novamente em loop e não procure outra forma de entrada.
  • Execute também para cada link interno extra.
  • Um 404 para robots.txt conta como permitido; um 401/403 conta como negado.

2. Reconhecimento

node .claude/skills/analyze-reference/scripts/recon.mjs <url> [--slug <slug>]

Playwright (Chromium headless; defina QA_CHROME_PATH ou CHROME_PATH se o próprio navegador do Playwright não estiver instalado) carrega a página, a percorre e escreve .cache/analyze/<slug>/recon.json e screens/{375,768,1440}-<n>.png. O JSON contém apenas estrutura e estatísticas: seções em ordem com alturas e contagens de cabeçalhos/palavras (nunca texto), tamanhos de tipo agregados, alturas de linha, espaçamento, uso de grid/flex, fontes classificadas como serif/sans/mono/display (nunca nomeadas), cores como descrições de função (nunca códigos), bibliotecas detectadas com evidência e confiança, domínios de rede, presença de canvas/WebGL e observações de movimento (reveal, pin, parallax, scrub, cabeçalho fixo, rolagem suave).

Contêineres de rolagem. Algumas páginas mantêm o documento com uma única altura de viewport e rolam um wrapper interno. recon.mjs detecta isso (o elemento visível overflow-y: auto|scroll|overlay cobrindo pelo menos 60% da viewport com o maior intervalo de rolagem) e o usa para capturas de tela, amostragem de movimento e a sonda de roda. recon.json registra scroller: { kind: "document" | "container", scrollHeightPx, clientHeightPx }, e viewports[w].docHeightPx é a altura rolável realmente usada. Verifique scroller.kind ao ler a evidência. A heurística é registrada, não garantida: se as capturas de tela mostrarem um painel lateral ou modal em vez da página, diga isso na folha. Não coberto: rolagens aninhadas ou horizontais e cenas acionadas por eventos de roda sem elemento rolável. Uma página também pode parar de rolar em uma largura (por exemplo, um breakpoint de tablet); então uma captura de tela nessa largura está correta.

Por trás de um proxy. Quando HTTPS_PROXY ou HTTP_PROXY está definido (sessões em nuvem), check-robots.mjs e recon.mjs se reexecutam uma vez com NODE_USE_ENV_PROXY=1 para que o fetch do Node o use, e recon.mjs passa o proxy para o Chromium (loopback permanece direto). Nenhuma flag necessária; a linha de aviso experimental do Node é ocultada. Os certificados vêm de NODE_EXTRA_CA_CERTS como de costume; os scripts nunca os leem ou incorporam. Sem proxy, nada muda.

Saída 3 significa que a página não é analisável (formulário de login, desafio de bot, HTTP 401/403/429, inacessível). PARE: nenhuma folha, informe ao usuário o motivo (para uma página de login: "a página não é pública"). Nunca tente evitar um bloqueio, resolver um desafio, fazer login ou alterar o user agent.

3. Ler as evidências

  • Leia .cache/analyze/<slug>/recon.json completamente.
  • Veja as capturas de tela com a ferramenta Read, pelo menos algumas por largura, para julgar o que os números não podem: composição do hero, ritmo, densidade, onde um layout quebra a grade, o que se move. Elas são apenas para seus olhos; nunca copie, incorpore ou faça referência a elas.
  • Confiança: um global ou uma classe DOM mais um nome de script correspondente é alta; um deles sozinho é média; um domínio de rede sozinho é baixa. Bibliotecas agrupadas no código do aplicativo aparecem apenas como correspondências de nome de script, então diga "provavelmente" e mantenha a confiança relatada pelo recon.

4. Escrever a folha

Copie a estrutura de patterns/_template.md para patterns/<slug>.md. Preencha o frontmatter (url, slug, data de hoje como YYYY-MM-DD, focus, libraries como uma lista de nomes) e cada seção, com suas próprias palavras:

SeçãoConteúdo
ResumoQue tipo de página é esta e por que vale a pena aprender com ela
Mapa de seçõesSeções ordenadas: função, altura aproximada em viewports, ideia de layout
HeroTipo de hero, composição da primeira tela, o que se move ao carregar
Grade e espaçamentoSistema de colunas, classe de largura de conteúdo, escala de espaçamento (unidade base), ritmo vertical
TipografiaClasses genéricas ("grotesco grande de display + corpo serifado"), proporção de escala, pesos, hábitos de altura de linha e espaçamento entre caracteres, capitalização
PaletaFunções e tons ("fundo quase preto, acento quente saturado"), caráter de contraste, tema
DensidadeConteúdo por tela, espaços em branco, ideias por seção, equilíbrio texto-mídia
MovimentoTabela: momento, gatilho (carregar, rolar, passar o mouse), tipo (reveal, pin, parallax, scrub, transição de página, shader/3D), técnica e biblioteca, confiança
BibliotecasBibliotecas detectadas com a classe de evidência e confiança
O que pegar / o que evitarO que reutilizar como padrão em uma landing original e o que é muito específico ou arriscado de imitar

Entradas de movimento: uma linha por efeito relevante. Uma seção que fixa enquanto seu conteúdo anima com rolagem é gatilho rolar, tipo pin+scrub, com a biblioteca e sua confiança. O comportamento de passar o mouse não é medido pelo recon; observe as capturas de tela ou a contagem hoverTransitionElements e declare sua confiança como baixa quando inferir.

5. Validar

npm run validate:patterns

Deve passar. Se reportar violações file:line, reescreva essas linhas de forma mais abstrata e execute novamente. Nunca enfraqueça o validador e nunca use uma linha > note: para contrabandear cópia: esse prefixo só isenta seus próprios comentários curtos da regra de citação longa.

Opcional, apenas se um efeito marcado como interessante permanecer inexplicado após o passo 3: npx rea-agents analyze-javascript-application <url> (pesado, nunca obrigatório). Registre apenas uma conclusão escrita ("caminho de câmera vinculado à rolagem acionado por uma biblioteca de timeline, confiança média"), nunca sua saída, código ou dumps. Pule se precisar de acesso de rede que você não tem.

6. Limpeza (sempre)

node .claude/skills/analyze-reference/scripts/recon.mjs --cleanup <slug>

Execute após um sucesso, após um abortamento em qualquer etapa e após um erro. Em seguida, confirme que .cache/analyze/<slug> sumiu e que git status não mostra nada do site (apenas patterns/<slug>.md em caso de sucesso). recon.mjs também remove sua própria pasta quando falha, mas você ainda executa a limpeza.

7. Relatar ao usuário

Diga o que foi analisado, o caminho da folha, as bibliotecas com confiança, qualquer coisa que você não pôde determinar e que um humano deve revisar a folha no PR. Em caso de abortamento: o motivo e que nenhuma folha foi escrita.

Regras de abstração (rigorosas)

Nunca coloque o seguinte na folha, no resumo da folha no chat, em um commit ou em qualquer arquivo versionado:

  • Texto do site: manchetes, corpo do texto, microcópia, texto alternativo, meta descrições (apenas o título da página e a URL são permitidos).
  • URLs de imagem, vídeo, fonte, modelo 3D ou ícone e qualquer arquivo de ativo.
  • Código fonte, marcação, CSS, JS ou fragmentos de shader, mesmo que curtos, minificados ou editados.
  • Códigos de cor hex, rgb(), hsl() ou outros. Descreva por função e tom.
  • Nomes de fontes de marca ou proprietárias. Use classes genéricas.
  • Logotipos, marcas, ilustrações.

Escreva sobre padrões da maneira que um designer faria um briefing para um colega: "seção de declaração fixa, conteúdo varrido em cerca de uma viewport extra", não uma transcrição da marcação. Se você não tiver certeza se um detalhe é conteúdo ou padrão, deixe-o de fora.

Casos de abortamento

SituaçãoAção
robots.txt nega o caminho para *, ClaudeBot, anthropic-ai ou GPTBotPare no passo 1, relate a regra correspondente, nenhuma folha
Reserva TDM (arquivo TDMRep, cabeçalho ou meta, ou diretiva robots.txt)Pare no passo 1, relate, nenhuma folha
noai, noindex ou none em X-Robots-Tag ou meta robotsPare no passo 1, relate, nenhuma folha
Permissões não podem ser verificadas (5xx, timeout, arquivo ilegível)Pare no passo 1, diga "não é possível verificar permissões", nenhuma folha
Formulário de login, paywall, HTTP 401/403/429, desafio de botPare no passo 2, diga que a página não é pública ou bloqueia navegadores automatizados, nenhuma folha; não evite
URL inacessível ou resposta não 2xxPare no passo 2, relate o erro, nenhuma folha
Validação continua falhandoCorrija abstraindo mais; se não puder passar sem perder o ponto, diga e não escreva nenhuma folha

Em todos os casos de abortamento, execute o passo 6.

Atribuição

A abordagem de reconhecimento (capturas de tela em várias larguras, estrutura DOM, estilos computados, interação e observação de rolagem) é adaptada das fases de recon da skill clone-website em JCodesMore/ai-website-cloner-template, Licença MIT. Apenas a ideia das fases de recon foi reutilizada e reescrita para descrição abstrata; nenhum código e nenhuma de suas fases de download de ativos ou reconstrução está incluída.

Individual skills in this repo

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

williamsnieves/landing-factory

tasteskill v2, the anti-slop frontend skill. Art direction for websites, distilled from a study of 247 curated gallery sites (One Page Love, Awwwards Sites of the Day). Deals researched directions (idea, composition, type, palette, photographs, section blueprints) from a library, enforces a strict no-slop house style with a real-browser inspector, and runs a look-and-fix loop on screenshots. Use this whenever you build, design, redesign, restyle, polish or review a landing page, marketing site, portfolio, product page, one-pager, hero or any public-facing web page, in any stack (HTML/CSS, React, Next.js, Vue, Svelte, Astro, Tailwind) — also when the user says a page looks generic, templated, "AI-made", sloppy, or asks to make it look designed, premium, award-level or less like every other site. Not for dashboards or app screens.

williamsnieves/landing-factory

Use when the user wants to design, redesign, shape, critique, audit, polish, simplify, harden, animate, or otherwise improve a frontend interface: websites, landing pages, dashboards, product UI, components, forms, settings, onboarding, empty states, and native iOS or Android screens. Handles UX review, hierarchy, layout, typography, color, motion, UX copy, accessibility, responsive behavior, edge cases, and capturing or documenting design systems (DESIGN.md, tokens). Also for making bland UI bolder, loud UI quieter, or ambitious visual effects. Not for backend-only or non-UI tasks.

williamsnieves/landing-factory

Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks. Also use when the user says "openspec apply", "opsx apply", or "openspec implement".

williamsnieves/landing-factory

Archive a completed OpenSpec change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete. Also use when the user says "openspec archive" or "opsx archive".

Habilidades Relacionadas