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:
- 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).
- 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.
- Convergência, não tentativa única — a página finalizada passa pelo loop adversarial
screen-quality-loopantes 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.mdexiste, seus tokens eaesthetic_rulessubstituem 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 emreferences/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.mddo projeto e verifique a seção## Languagepara 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 existirCLAUDE.mdou seção## Language, o padrão é coreano.
Procedimento de Execução
Passo 0: Coleta e Tom de Design
A. Análise de Argumentos
| Argumento | Ação |
|---|---|
Resumo de texto (ex. Software de contabilidade com IA para freelancers) | Usar como resumo do produto/marca |
| URL | WebFetch 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-video | Pular Veo completamente — herói usa o fallback animado em CSS (Caminho C) |
--auto | Zero 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
docs/design-system/DESIGN.mdexiste → carregar tokens +aesthetic_rules; a tabela de tom abaixo apenas preenche lacunas.- Caso contrário → derivar o tom de design do resumo:
| Sinal de marca/produto | Tom de design | Direção de movimento do herói |
|---|---|---|
| SaaS / ferramentas de desenvolvimento / produto de IA | Gradiente Tech Escuro | aurora lenta / deriva de gradiente, campo de partículas esparso |
| Luxo / bens premium | Luxo Editorial | deriva macro de material (seda, metal líquido), profundidade de campo rasa |
| Aplicativo de consumo / estilo de vida / bem-estar | Ambiente Suave | cena com foco suave, vazamentos de luz à deriva, paralaxe suave |
| Finanças / B2B / empresa | Mínimo Confiante | geometria abstrata, movimento lento de linhas e malhas, paleta contida |
| Estúdio criativo / evento / portfólio | Cinético Ousado | formas de alto contraste, campos de cor amplos |
- 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
- Construir 4–5 consultas de busca no Pinterest a partir de
{tom} + {indústria} + meio(receitas no arquivo de referência). - 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. - 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};captureScreenshotcom caminhos absolutos; fechar comcompleteTaskSpace('astra landing {slug}', { keep: false })quando concluído. - 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:
- Arquétipo de layout — ex. herói de vídeo em tela cheia + faixas de recursos alternadas + CTA de fechamento.
- 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. - 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.
- 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).
- 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ção | Caminho |
|---|---|
mcp__fect-mcp__veo_* presente e mcp__fect-image__nanobanana_text2img presente | A — Loop Bookend (padrão) |
mcp__fect-mcp__veo_* presente, fect-image ausente | B — text2video + loop crossfade |
Ferramentas Veo ausentes, ou --no-video | C — 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.
- 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). - 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 parafast/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). - Verificar (nunca afirmar sem isso):
[ -f ]do mp4 +ffprobeduração ≥ 7 s. Ausente/curta → regenerar uma vez; ainda falhando → Caminho B; Veo errando completamente → Caminho C. - Seam QA: extrair primeiro + último quadros, comparar com
mcp__fect-mcp__vision_compare(ouReadambos). 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:
- HTML: semântico (
<header>,<section>,<article>,<footer>) com atributoslangedir. Nenhum div genérico para seções de conteúdo. - CSS: variáveis CSS para todos os tokens de design, layout mobile-first com consultas de mídia, fallback
prefers-reduced-motionque congela todas as animações (incluindo o loop de vídeo), propriedadecontent-visibility: autopara seções abaixo da dobra, nenhum!important. - 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.
- Acessibilidade:
roleearia-labelapropriados no player de vídeo, suporte aprefers-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:
- 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
- Decisões de design: arquétipo, vocabulário de movimento, paleta + fontes, elementos anti-AI
- Mudanças de caminho: Caminho A/B/C escolhido e por que qualquer fallback foi acionado
- Suposições (somente modo
--auto): quaisquer interpretações feitas sem confirmação do usuário - Orçamento: tamanhos de arquivo de
hero-desktop.mp4,hero-mobile.mp4ehero-poster.jpg - Declaração de dependências: qual backend de navegador foi usado (ou "search-derived"), qual processamento ffmpeg foi aplicado (ou "raw — sem ffmpeg")
- 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.