Communitygithub.com

ASTRA-TECHNOLOGY-COMPANY-LIMITED/astra-methodology

Constrói uma landing page de marketing premium, orientada por referências visuais, como um pacote HTML autocontido — captura de referências do Pinterest em navegador real, direção de design ancorada em referências, vídeo herói Veo 3.1 com loop contínuo (fallback animado em CSS) e implementação responsiva mobile-first com uma passagem de convergência de qualidade de tela.

O que é astra-methodology?

Este skill permite que você construa landing pages de marketing premium e prontas para produção, usando uma metodologia rigorosa que prioriza referências visuais do mundo real, vídeo gerado por IA como material de design e um processo de convergência adversarial que garante qualidade de nível profissional. Ele coleta de 6 a 12 referências de animação/layout do Pinterest e galerias similares antes de qualquer decisão de design, destilando-as em um resumo de design ancorado nas referências. O herói da página é um vídeo de loop contínuo gerado pelo Google Veo 3.1, com fallback animado em CSS e controles de acessibilidade de movimento obrigatórios. O projeto finalizado passa por uma verificação adversarial de qualidade antes de ser considerado concluído — tudo dentro de rígidos limites de custo (1 imagem estática + 1 clipe Veo por padrão). O skill suporta plataformas como Cursor, Claude Code e OpenHands, e opera em qualquer projeto com um diretório `docs/` e uma estrutura de tarefas. É ideal quando um usuário pede para 'construir uma landing page', 'criar uma página de marketing/promocional' ou deseja um fundo herói animado ou com vídeo.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ASTRA-TECHNOLOGY-COMPANY-LIMITED/astra-methodology/tree/HEAD/skills/landing-page

Perguntar na sua IA favorita

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

Documentação

Construtor de Landing Page Premium Orientado por Referências

Estilo de saída coreano: para texto voltado ao usuário coreano (perguntas HITL, relatórios de status, respostas), aplique $CLAUDE_PLUGIN_ROOT/docs/development/korean-style.md — §"Regras de escrita de perguntas HITL" e §"Princípios de respostas e relatórios". Arquivos coreanos escritos em disco são verificados automaticamente pelo hook PostToolUse de estilo coreano.

Produz uma landing page de nível de produção e autocontida, combinando três práticas que diferenciam o trabalho profissional da saída genérica de IA:

  1. Referências visuais primeiro — referências reais de animação/layout são coletadas do Pinterest (e galerias similares) com um navegador real antes de qualquer decisão de design, depois destiladas em um resumo de design ancorado em referências (nunca copiado).
  2. Vídeo de IA como material de design — o fundo herói é um vídeo de loop contínuo gerado com Google Veo 3.1, dirigido artisticamente para os tokens de design, pós-processado para a web e reproduzido através de um script de loop infinito que oculta a emenda do loop.
  3. Convergência, não tentativa única — a página finalizada passa pelo loop adversarial screen-quality-loop antes de ser reportada como concluída.

Princípios centrais:

  • Ancorado em referências, nunca copiado de referências — as referências contribuem com padrões (arquétipo de layout, vocabulário de movimento, direção de paleta); nenhum design específico é reproduzido e nenhum ativo de terceiros é enviado no entregável.
  • DESIGN.md é lei — quando docs/design-system/DESIGN.md existe, seus tokens e aesthetic_rules substituem os padrões de tom derivados no Passo 0.
  • Degradação graciosa em cada dependência externa — nenhum acesso ao Pinterest, nenhuma ferramenta Veo, nenhum ffmpeg e nenhum navegador são todos suportáveis; cada fallback é declarado no relatório final, nunca substituído silenciosamente.
  • Disciplina de custo — o orçamento de geração padrão é exatamente 1 imagem estática + 1 clipe Veo (8 s, veo-3.1-lite); qualquer coisa a mais requer uma solicitação explícita do usuário (a regeneração limitada e única de Seam-QA em references/veo-loop-video.md §6 faz parte do orçamento padrão, não um excedente).
  • Acessibilidade de movimento é inegociável — fallback prefers-reduced-motion, um controle de pausa visível (WCAG 2.2.2) e uma estratégia LCP de pôster primeiro são obrigatórios, não um refinamento.

Local de saída: landing/{slug}/ (entregável) + landing/{slug}/.work/ (clipes brutos, imagens estáticas, evidências de QA — nunca referenciados pela página).

🌐 REGRA DE IDIOMA: Antes de executar este skill, leia o CLAUDE.md do projeto e verifique a seção ## Language para detectar o idioma do projeto. Se o idioma do projeto NÃO for coreano (ko), TRADUZA todo o texto da página voltado ao usuário e a saída do relatório para o idioma do projeto. Identificadores técnicos (caminhos de arquivo, variáveis CSS, nomes de classe) permanecem sem tradução. Se não existir CLAUDE.md ou seção ## Language, o padrão é coreano.


Procedimento de Execução

Passo 0: Coleta e Tom de Design

A. Análise de Argumentos

ArgumentoAção
Resumo de texto (ex. Software de contabilidade com IA para freelancers)Usar como resumo do produto/marca
URLWebFetch da página — extrair produto, público, pistas visuais existentes da marca
Caminho docs/planner/{NNN}-*/Ler entregáveis do planejador (personas, KPI, designs de tela) como resumo
--refs=<dir>Usar as próprias imagens de referência do usuário de <dir>; pular a captura do Passo 1 (a análise ainda é executada)
--slug=<nome>Nome do diretório do entregável; caso contrário, derivar kebab-case da marca/recurso
--no-videoPular Veo completamente — herói usa o fallback animado em CSS (Caminho C)
--autoZero HITL — prosseguir com suposições declaradas (para uso em pipeline)
(vazio)Escanear docs/planner/ pelo pacote mais recente; se nenhum, pedir um resumo de uma linha

B. Verificação de Ambiguidade (Pensar Antes de Codificar — máx. 1 HITL)

Se o resumo não definir (1) público-alvo e (2) a única ação de conversão primária (inscrição / compra / contato / download), perguntar uma vez com opções de interpretação. Sob --auto, escolher a interpretação mais provável e registrá-la em "Suposições" no relatório final. Nunca fazer mais de uma pergunta de coleta.

C. Carregamento do SSoT de Design

  1. docs/design-system/DESIGN.md existe → carregar tokens + aesthetic_rules; a tabela de tom abaixo apenas preenche lacunas.
  2. Caso contrário → derivar o tom de design do resumo:
Sinal de marca/produtoTom de designDireção de movimento do herói
SaaS / ferramentas de desenvolvimento / produto de IAGradiente Tech Escuroaurora lenta / deriva de gradiente, campo de partículas esparso
Luxo / bens premiumLuxo Editorialderiva macro de material (seda, metal líquido), profundidade de campo rasa
Aplicativo de consumo / estilo de vida / bem-estarAmbiente Suavecena com foco suave, vazamentos de luz à deriva, paralaxe suave
Finanças / B2B / empresaMínimo Confiantegeometria abstrata, movimento lento de linhas e malhas, paleta contida
Estúdio criativo / evento / portfólioCinético Ousadoformas de alto contraste, campos de cor amplos
  1. Carregar os dois guias de UX — eles governam todas as decisões estéticas e de movimento nos Passos 2–4:
    • $CLAUDE_PLUGIN_ROOT/docs/ux/vibe-coding-design-guide.md (§4 técnicas de prompt, §4.1 estética anti-AI, §4.2 prompts ancorados em referências)
    • $CLAUDE_PLUGIN_ROOT/docs/ux/vibe-coding-animation-guide.md (§15 acessibilidade de movimento, §18 fundos de vídeo gerados por IA)

D. Proteção da Árvore de Trabalho Principal e Sincronização dev

Landing pages são entregáveis da fase de planejamento — executar na árvore de trabalho principal em dev, como os outros skills de sincronização dev:

PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-$(find ~/.claude/plugins/cache -maxdepth 3 -type d -path '*/astra-methodology/*' 2>/dev/null | sort -V | tail -1)}"
if [ -z "$PLUGIN_ROOT" ] || [ ! -f "$PLUGIN_ROOT/scripts/worktree-helpers.sh" ]; then
  echo "ERROR: CLAUDE_PLUGIN_ROOT not found. Check the plugin cache path." >&2; exit 1
fi
source "$PLUGIN_ROOT/scripts/worktree-helpers.sh"
astra_ensure_main_worktree || exit 1

Em seguida, sincronizar dev exatamente como o /catalog-generator Passo 0.G faz (verificar branch → stash se sujo → git fetch origin dev && git checkout dev && git pull origin dev → pop stash; fallback para main/master quando dev estiver ausente).


Passo 1: Coleta de Referências (Pinterest)

Coletar 6–12 referências de animação/layout antes de projetar qualquer coisa. Procedimento completo, receitas de consulta, tratamento de popups e modelo de quadro: ler $CLAUDE_PLUGIN_ROOT/skills/landing-page/references/reference-collection.md ANTES de iniciar este passo.

A. Resolver o Backend do Navegador

De acordo com a ordem do plugin (padrão ego → fallback Chrome MCP; SSoT: $CLAUDE_PLUGIN_ROOT/docs/development/browser-backend-policy.md):

command -v ego-browser >/dev/null 2>&1 && echo ego || echo ""

Saída vazia → chrome-mcp quando ferramentas mcp__chrome-devtools__* estiverem presentes. Nenhum disponível → fallback de captura: WebSearch por descrições atuais de vitrines de landing page/animação (galerias de prêmios, vitrines de movimento) e construir um quadro de referência apenas em texto; declarar "quadro de referência: derivado de busca (sem navegador)" no relatório final.

B. Busca e Captura

  1. Construir 4–5 consultas de busca no Pinterest a partir de {tom} + {indústria} + meio (receitas no arquivo de referência).
  2. Por consulta: abrir https://www.pinterest.com/search/pins/?q={consulta}, dispensar modais de sobreposição, window.scrollTo(0, 0) (proteção de quadro em branco ego), capturar a grade de resultados, depois abrir os 1–2 pins principais e capturar suas visualizações de detalhes.
  3. Modo ego: um heredoc = uma rodada, e uma captura leva três ou mais rodadas (navegar → sonda de prontidão → varrer+capturar; nunca comprimido em uma, ou a captura sai em branco — veja o arquivo de referência); Espaço de Tarefa astra landing {slug}; captureScreenshot com caminhos absolutos; fechar com completeTaskSpace('astra landing {slug}', { keep: false }) quando concluído.
  4. Salvar capturas em landing/{slug}/design/references/ref-{NN}.png. Pinterest inacessível (parede de login persiste / bloqueio de rede) → tentar novamente as mesmas consultas nas galerias similares listadas no arquivo de referência; ainda nada → fallback de captura do Passo 1.A.

C. Análise de Visão → Quadro de Referência

Para cada captura, extrair um registro estruturado (prompt de análise no arquivo de referência): arquétipo de layout, tratamento do herói, vocabulário de movimento (o que se move, quão lentamente, qual easing), direção de paleta, caráter tipográfico, densidade, um detalhe distinto que vale a pena adaptar. Usar mcp__fect-mcp__vision_analyze quando disponível; caso contrário Read cada PNG diretamente (leitura multimodal).

Escrever landing/{slug}/design/reference-board.md — registros por imagem + uma seção de síntese ("o que essas referências concordam"). Verificar com [ -f ] antes de afirmar que o quadro existe.

Proteção de originalidade: o quadro registra padrões, nunca instruções para reproduzir um pin específico. As capturas de referência permanecem em design/references/ como material de trabalho interno — nunca são vinculadas de index.html e nunca enviadas como ativos da página.


Passo 2: Síntese da Direção de Design

Destilar o quadro de referência + tom de design + DESIGN.md em um resumo de design confirmado em landing/{slug}/design/direction.md, contendo exatamente estas decisões:

  1. Arquétipo de layout — ex. herói de vídeo em tela cheia + faixas de recursos alternadas + CTA de fechamento.
  2. Vocabulário de movimento — as regras de movimento em toda a página (durações, easings, estilo de revelação por rolagem) extraídas do quadro de referência, mapeadas nas técnicas do vibe-coding-animation-guide.md.
  3. Plano de mídia do herói — decisão do Caminho A/B/C (tabela do Passo 3), mais o assunto do vídeo, clima e comportamento da câmera.
  4. Paleta + tipografia — dos tokens DESIGN.md quando presentes; caso contrário, derivados do tom + referências (valores OKLCH, uma família de exibição + uma de corpo).
  5. Elementos distintivos anti-AI — pelo menos 2 escolhas distintas concretas (por design-guide §4.1 / DESIGN.md aesthetic_rules): ex. grade assimétrica, par serifado editorial, textura de granulado/ruído, indicador de rolagem personalizado, numerais superdimensionados. Saída genérica de herói centralizado + três cartões + gradiente roxo é um defeito, não uma linha de base.

HITL (pular sob --auto): apresentar as 5 decisões como um resumo compacto e fazer uma única pergunta de confirmação/ajuste. Este é o último portão de decisão — tudo depois disso é executado sem supervisão.


Passo 3: Produção do Vídeo de Loop do Herói (Veo 3.1)

Ler $CLAUDE_PLUGIN_ROOT/skills/landing-page/references/veo-loop-video.md ANTES deste passo — ele contém as receitas de prompt, modelos de chamada de ferramenta e todos os comandos ffmpeg.

A. Decisão do Caminho

CondiçãoCaminho
mcp__fect-mcp__veo_* presente e mcp__fect-image__nanobanana_text2img presenteA — Loop Bookend (padrão)
mcp__fect-mcp__veo_* presente, fect-image ausenteB — text2video + loop crossfade
Ferramentas Veo ausentes, ou --no-videoC — Herói animado em CSS (sem vídeo; modelo em references/video-integration.md)

A presença da ferramenta é determinada pelas ferramentas disponíveis na sessão (o servidor fect-mcp é de nível de usuário e não incluído — a ausência é normal, não um erro). Registrar o caminho escolhido; o relatório final deve declará-lo e, para B/C, o porquê.

B. Caminho A — Loop Bookend (primeiro quadro == último quadro)

O truque do loop contínuo: gerar uma imagem estática dirigida artisticamente, depois fazer o Veo animá-la desse quadro de volta para esse quadro — veo_img2video com lastImagePath definido para o mesmo arquivo que sourceImagePath. Os primeiros e últimos quadros do clipe são pixel-idênticos, então ele faz loop sem uma emenda visível, e a imagem estática funciona como pôster LCP.

  1. Imagem estática: mcp__fect-image__nanobanana_text2img → landing/{slug}/.work/hero-frame.png — 16:9, paleta correspondente aos tokens, espaço negativo calmo onde o título ficará, sem texto, sem logotipos, sem rostos (modelo de prompt por tom no arquivo de referência).
  2. Clipes: mcp__fect-mcp__veo_img2video — sourceImagePath = lastImagePath = hero-frame.png, durationSeconds: 8, resolution: "1080p" (1080p requer 8 s), aspectRatio: "16:9", modelo padrão (veo-3.1-lite — aumentar para fast/completo apenas se a saída lite falhar no Seam QA duas vezes). Prompt = movimento ambiente cíclico que retorna visivelmente ao seu início (receitas por tom no arquivo de referência; sem cortes, sem novos assuntos, sem texto).
  3. Verificar (nunca afirmar sem isso): [ -f ] do mp4 + ffprobe duração ≥ 7 s. Ausente/curta → regenerar uma vez; ainda falhando → Caminho B; Veo errando completamente → Caminho C.
  4. Seam QA: extrair primeiro + último quadros, comparar com mcp__fect-mcp__vision_compare (ou Read ambos). Um salto visível → aplicar o loop crossfade ffmpeg do arquivo de referência por cima.

C. Caminho B — text2video + Loop Crossfade

mcp__fect-mcp__veo_text2video com a receita de prompt amigável para loop, depois torná-lo contínuo com o auto-crossfade ffmpeg (misturar o segundo final no segundo inicial; comando no arquivo de referência). Pôster = primeiro quadro extraído.

D. Pós-Produção (todos os caminhos de vídeo)

Com ffmpeg (command -v ffmpeg): remover áudio (-an — o vídeo de fundo é sempre mudo; a trilha de áudio nativa do Veo é peso morto), codificar a escada hero-desktop.mp4 (1920 w, H.264 CRF 24, +faststart) + hero-mobile.mp4 (720 w, CRF 26) e produzir hero-poster.jpg (Caminho A: convertido de hero-frame.png; Caminho B: primeiro quadro). As saídas vão para landing/{slug}/assets/video/.

Sem ffmpeg → usar o mp4 Veo bruto para ambas as variantes; o player JS crossfade (Passo 4) mascara qualquer emenda residual. Declarar a compressão ausente no relatório final — não apresentar a página como otimizada em tamanho.

Portão de orçamento: hero-desktop.mp4 ≤ 4 MB, hero-mobile.mp4 ≤ 1.5 MB, pôster ≤ 200 KB (verificar com stat -f%z / du -k). Acima do orçamento → aumentar CRF e recodificar antes de prosseguir.

Uma variante retrato 9:16 (segunda geração Veo) é gerada apenas mediante solicitação explícita do usuário — a estratégia móvel padrão é o downscale de 720 w + carregamento do pôster primeiro.


Passo 4: Implementação da Página

Ler $CLAUDE_PLUGIN_ROOT/skills/landing-page/references/video-integration.md ANTES deste passo — ele contém a marcação do herói, o player completo de loop infinito loop-video.js, o CSS de fallback e as estratégias de carregamento LCP.

A implementação é um único arquivo HTML autocontido em landing/{slug}/index.html com CSS e JS inline (<style>, <script>). Nenhuma dependência externa (CDN, fontes, ícones, folhas de estilo). Regras:

  1. HTML: semântico (<header>, <section>, <article>, <footer>) com atributos lang e dir. Nenhum div genérico para seções de conteúdo.
  2. CSS: variáveis CSS para todos os tokens de design, layout mobile-first com consultas de mídia, fallback prefers-reduced-motion que congela todas as animações (incluindo o loop de vídeo), propriedade content-visibility: auto para seções abaixo da dobra, nenhum !important.
  3. JS: o player de vídeo de loop infinito do arquivo de referência (usando a variante CSS-animada quando o vídeo não pode carregar), o controle de pausa visível (WCAG 2.2.2), comportamento de inicialização de pôster LCP. Nenhuma dependência — sem jQuery, sem bibliotecas de intersecção, sem import maps.
  4. Acessibilidade: role e aria-label apropriados no player de vídeo, suporte a prefers-reduced-motion, contraste de cor WCAG AA em todo o texto, navegação por teclado na seção CTA.

As variáveis CSS e a estrutura de componentes são fornecidas em references/video-integration.md e references/css-template.md — ler ambos antes de escrever qualquer HTML.


Passo 5: Convergência — Loop de Qualidade de Tela

Executar o loop adversarial screen-quality-loop do plugin completo em landing/{slug}/:

# O loop é definido no script de qualidade urbana do plugin
source "$PLUGIN_ROOT/scripts/screen-quality-loop.sh"
run_screen_quality_loop "landing/$SLUG/index.html" --viewport-mobile 375x812 --viewport-desktop 1440x900

O loop captura a página em ambos os viewports, analisa a saída quanto a bugs de layout, falhas de animação, vazamentos de texto, lacunas de responsividade e vazamentos de emenda de loop de vídeo. Os resultados são salvos em landing/{slug}/.work/qa/ como sobreposições lado a lado. Se alguma verificação falhar, corrija e repita o loop — nenhuma página é entregue até que o loop passe em todas as verificações sem saída de erro.

Verificações que o loop executa:

  • Layout: nenhum conteúdo estourado, eixo de rolagem correto, lacunas de responsividade entre pontos de interrupção
  • Herói: o vídeo carrega, o pôster LCP é exibido antes do vídeo, o controle de pausa funciona, o fallback de movimento reduzido é ativado
  • Tipografia: sem estouro de texto, sem vazamento de fonte, taxas de escala corretas
  • CTA: visível, focalizável, sem sobreposição

Passo 6: Relatório Final

Escrever landing/{slug}/REPORT.md contendo:

  1. Resumo do entregável: slug, caminho do diretório, contagem de referências, caminho de vídeo (ou "CSS fallback"), contagem de rodadas de convergência
  2. Decisões de design: arquétipo, vocabulário de movimento, paleta + fontes, elementos anti-AI
  3. Mudanças de caminho: Caminho A/B/C escolhido e por que qualquer fallback foi acionado
  4. Suposições (somente modo --auto): quaisquer interpretações feitas sem confirmação do usuário
  5. Orçamento: tamanhos de arquivo de hero-desktop.mp4, hero-mobile.mp4 e hero-poster.jpg
  6. Declaração de dependências: qual backend de navegador foi usado (ou "search-derived"), qual processamento ffmpeg foi aplicado (ou "raw — sem ffmpeg")
  7. Avisos de acessibilidade: qualquer comportamento de movimento reduzido, status do controle de pausa (obrigatório, sempre presente)

Validação Pós-Implantação

Após a página ser construída e relatada, executar estas verificações para garantir que é um entregável pronto para produção:

# 1. Validar HTML — nenhum markup quebrado
python3 -c "import html.parser, sys; parser = html.parser.HTMLParser(); parser.feed(open('landing/$SLUG/index.html').read()); print('HTML válido')" 2>&1 || echo "ERRO: HTML inválido"

# 2. Verificar recursos autocontidos — sem CDN, sem dependências externas
grep -c 'src=["\'\'']https\?://' landing/$SLUG/index.html && echo "AVISO: dependências externas encontradas" || echo "Recursos autocontidos: OK"

# 3. Simular performance mobile — Lighthouse de linha de comando se disponível, caso contrário verificação de tamanho
ls -lh landing/$SLUG/index.html | awk '{print "Tamanho da página: " $5}'

# 4. Verificar caminhos de ativos — todos os recursos locais existem
for asset in $(grep -oP '(?<=src=["\'\''])[^"\'\'']*' landing/$SLUG/index.html); do
  [ -f "landing/$SLUG/$asset" ] || echo "MISSING: $asset"
done

Hooks de Pós-Execução

Após a conclusão da página, o clipe de vídeo do herói e a imagem estática (para Caminho A) são postados como artefatos no canal de discussão (apenas em modo interativo):

  • hero-loop.mp4 — o loop contínuo final (primeiro quadro = último quadro para Caminho A)
  • hero-frame.png — a imagem estática fonte (apenas Caminho A)

O relatório REPORT.md é copiado para a área de transferência.

Habilidades Relacionadas