Habilidade de Processamento de Agência (Agência Única)
Você processa exatamente uma imobiliária do início ao fim:
- Extraia rapidamente a marcação + contato + imagens da homepage (uma única chamada).
- Selecione o sistema de design apropriado com base no tipo de agência.
- Gere uma página de demonstração focada em conversão.
- Atualize continuamente o progresso + a atividade para que a interface do usuário flua suavemente.
Regras Rígidas
- Não crie outros agentes.
- Não use emojis em nenhum texto que escrever.
- Use apenas os caminhos absolutos fornecidos no prompt.
- NÃO use WebSearch - extraia apenas da homepage.
- Máximo de 1 chamada WebFetch (apenas homepage).
Entradas (do prompt)
agencyId: slug seguro para URL (exemplo:ray-white-surry-hills)sessionId: ID da sessão do pipelinename: nome da agência (melhor esforço)website: URL do site da agênciaprogressFilePath: caminho absoluto paradata/progress/agency-{agencyId}.jsonactivityFilePath: caminho absoluto paradata/progress/agency-activity-{agencyId}.jsondemoHtmlPath: caminho absoluto parapublic/demo/{agencyId}.htmlagencyDataPath: caminho absoluto paradata/agencies/{agencyId}.json
Ferramentas Permitidas
- Use apenas:
WebFetch,Read,Write,Glob - NÃO use:
WebSearch, ferramentas de automação de navegador
Arquivos de Saída (deve escrever todos)
1) Stream de Atividade (activityFilePath)
Armazene um único objeto JSON e anexe a messages:
{
"sessionId": "pipe-...",
"agencyId": "ray-white-surry-hills",
"agencyName": "Ray White Surry Hills",
"messages": [
{
"id": "msg-<timestamp>-<rand>",
"type": "thinking|tool|fetch|results|identified|warning",
"text": "Atualização curta voltada para o usuário",
"detail": "Opcional: URL ou consulta",
"source": "Subagente",
"timestamp": "2026-01-17T12:34:56.789Z"
}
]
}
Regras:
- Cada
iddeve ser único (use timestamp + sufixo aleatório). - Antes de
WebFetch, anexe uma mensagemfetchcomdetaildefinido para a URL. - Após cada marco, anexe uma mensagem curta
identified/results/thinking. - Mantenha apenas as últimas 250 mensagens.
2) Arquivo de Progresso (progressFilePath)
Sempre escreva JSON válido com chaves estáveis:
{
"agencyId": "...",
"sessionId": "...",
"status": "skeleton|extracting|generating|complete|error",
"updatedAt": "ISO timestamp",
"name": "...",
"website": "...",
"phone": null,
"address": null,
"email": null,
"logoUrl": null,
"primaryColor": null,
"secondaryColor": null,
"tagline": null,
"heroImageUrl": null,
"teamSize": null,
"listingCount": null,
"designSystem": null,
"htmlProgress": 0,
"demoUrl": null,
"steps": [
{ "id": "website", "label": "Site encontrado", "status": "pending|in_progress|complete|error" },
{ "id": "details", "label": "Detalhes extraídos", "status": "pending|in_progress|complete|error" },
{ "id": "generating", "label": "Gerando página de demonstração", "status": "pending|in_progress|complete|error" },
{ "id": "complete", "label": "Pronto", "status": "pending|in_progress|complete|error" }
],
"error": null
}
Regras:
- Atualize
updatedAtem cada gravação. - Nunca remova chaves; defina campos ausentes como
null.
3) Registro da Agência (agencyDataPath)
Escreva o registro durável usado pelo resto do sistema:
{
"id": "ray-white-surry-hills",
"name": "Ray White Surry Hills",
"website": "https://...",
"phone": "02 ...",
"email": null,
"address": "Endereço completo",
"tagline": null,
"branding": {
"logoUrl": null,
"primaryColor": "#0f172a",
"secondaryColor": "#ffffff",
"heroImageUrl": null
},
"metrics": {
"teamSize": null,
"listingCount": null
},
"researchedAt": "ISO timestamp",
"dataQuality": "complete|partial|minimal",
"notes": null,
"demoPage": {
"generated": true,
"generatedAt": "ISO timestamp",
"url": "/demo/ray-white-surry-hills",
"designSystem": "editorial-prestige"
}
}
Metas de Desempenho
| Métrica | Meta |
|---|---|
| Chamadas WebFetch | 1 (apenas homepage) |
| Chamadas WebSearch | 0 (nenhuma) |
| Gravações de arquivo de progresso | 4-5 |
| Tempo total por agência | <30 segundos |
Se os dados não estiverem claros após buscar a homepage, defina campos desconhecidos como null e prossiga.
NÃO faça buscas adicionais para dados ausentes.
Formato de Extração de Informações
Extraia esses campos do HTML da homepage em uma única passagem:
Obrigatório (deve encontrar ou definir como null)
| Campo | Onde Procurar | Formato |
|---|---|---|
logoUrl | <img> com "logo" em src/alt/class, <link rel="icon"> | URL completa |
phone | Links com tel:, texto correspondendo a padrões de telefone (02, 04, 1300, 1800) | Formato australiano |
address | Rodapé, seção de contato, marcação schema.org LocalBusiness | Endereço completo |
Melhor esforço (extrair se visível na homepage)
| Campo | Onde Procurar | Formato |
|---|---|---|
email | Links com mailto:, texto de email visível | [email protected] |
primaryColor | Fundo do cabeçalho/navegação, elementos da marca, cores do logotipo | Hex (#RRGGBB) |
secondaryColor | Botões CTA, elementos de destaque, links | Hex (#RRGGBB) |
tagline | Texto da seção herói, <meta name="description">, slogan | String curta |
teamSize | Texto "X agentes", contagem da equipe se visível | Número ou null |
listingCount | Texto "X propriedades", contagem de listagens se visível | Número ou null |
Imagens (VALIDAÇÃO ESTRITA EXIGIDA)
IMPORTANTE: A maioria das URLs de imagens extraídas NÃO funcionará. Use apenas imagens que passem em TODAS essas verificações:
Regras de Validação de URL de Imagem
REJEITAR se a URL:
- É um caminho relativo (não começa com http:// ou https://)
- Contém "placeholder", "default", "blank", "spacer"
- É de um CDN que requer autenticação (cloudinary transforms, imgix com tokens)
- É uma URI de dados base64
- É um arquivo SVG (geralmente ícones, não fotos)
- É menor que 100x100 (provavelmente um ícone)
- Contém parâmetros de rastreamento (?utm_, ?ref=, etc.)
- É de CDNs de mídia social (fbcdn, twimg) - geralmente expiram
PREFERIR URLs que:
- São do próprio domínio da agência
- São de CDNs estáveis (amazonaws, cloudfront sem URLs assinadas)
- Têm extensões de imagem comuns (.jpg, .jpeg, .png, .webp)
- São claramente nomeadas (hero.jpg, team-photo.png, office.jpg)
Prioridade de Extração
| Campo | Onde Procurar | Formato |
|---|---|---|
logoUrl | <img> com "logo" em src/alt/class, <link rel="icon"> | URL completa (validada) |
heroImageUrl | Fundo da seção herói, <img> do banner principal | URL completa (validada) |
NÃO extraia estes (raramente funcionam, poluem a página):
teamImageUrl- geralmente quebrado ou requer autenticaçãoofficeImageUrl- geralmente quebrado ou requer autenticação
Na Dúvida: NENHUMA IMAGEM
Se você não estiver confiante de que uma URL de imagem carregará, não a inclua. Uma página limpa sem imagens é melhor do que uma página quebrada com imagens ausentes. Use fundos de cor sólida em vez de imagens de herói potencialmente quebradas.
NÃO extrair (removidos para velocidade)
- soldCount, forRentCount, priceRangeMin, priceRangeMax
- painScore, painReasons
- hasPropertyManagement, hasChatWidget, hasAfterHoursNumber, hasOnlineBooking
Seleção de Sistema de Design
Antes de gerar HTML, selecione UM sistema de design com base na agência:
Lógica de Seleção
TIPO DE AGÊNCIA → SISTEMA DE DESIGN
─────────────────────────────────────────────────────────────────
Franquia nacional (Ray White, LJ Hooker, → "swiss-precision"
Century 21, Raine & Horne, McGrath, Belle) (limpo, profissional)
Agência boutique/independente → "editorial-prestige"
(distinto, premium)
Indicadores de mercado de luxo/prestígio → "quiet-luxury"
(palavras como "prestígio", "exclusivo", "luxo") (refinado, exclusivo)
Agência moderna/tech-forward → "cinematic-reveal"
(site elegante, branding moderno) (dramático, impactante)
Agência tradicional/estabelecida → "warm-authority"
(datas de fundação, foco comunitário) (confiável, acessível)
PADRÃO (quando não tiver certeza) → "editorial-prestige"
(funciona para a maioria)
Escreva o sistema de design selecionado para progress.designSystem e agencyRecord.demoPage.designSystem.
Restrições do Sistema de Design (DEVEM SEGUIR)
Cores Proibidas (AI-slop - NUNCA use estas)
- QUALQUER roxo/violeta/índigo: #6366F1, #8B5CF6, #A855F7, #7C3AED, #7a00df, #6200b3
- Ciano/teal neon: #00FF88, #00DDFF, #06B6D4
- Verde ChatGPT: #10A37F
- Qualquer combinação roxo + verde
- Qualquer gradiente azul-para-roxo
- QUALQUER fundo gradiente em seções de herói
Fontes Proibidas (abusadas - NUNCA use estas)
- Inter (a fonte AI-slop #1)
- Roboto, Open Sans, Lato
- Poppins, Montserrat
Fontes Aprovadas (use estas)
Manchetes: Playfair Display, Space Grotesk, Cabinet Grotesk, Fraunces
Corpo: Source Serif 4, DM Sans, IBM Plex Sans, Outfit
Layouts Proibidos (padrões AI-slop)
- Três cartões iguais com ícones em uma fileira horizontal
- Grades simétricas 2x2 ou 3x3 sem hierarquia
- Fundos gradientes de herói (use cores sólidas)
- "Cartões de recurso" genéricos com ícone + título + descrição
- Cartões de pontos problemáticos ou seções de "análise de oportunidade"
- Grades de estatísticas/métricas (tamanho da equipe, listagens, etc.)
REGRAS DE CONTRASTE DE COR (CRÍTICO)
O texto deve estar SEMPRE legível. Siga estas regras:
FUNDOS CLAROS (branco, creme, cinza claro):
- Use texto escuro: #1a1a1a, #333333, slate-900
- Nunca use texto branco ou claro
FUNDOS ESCUROS (marinho, carvão, preto):
- Use texto branco ou muito claro: #ffffff, #f5f5f5
- Nunca use texto escuro
FUNDOS DE COR DA MARCA:
- Se a cor da marca for CLARA (amarelo, azul claro, bege): use texto ESCURO
- Se a cor da marca for ESCURA (marinho, verde floresta, bordô): use texto CLARO
- Na dúvida, use fundo claro com texto escuro
NUNCA FAÇA:
- Texto branco em fundos amarelo/dourado
- Texto cinza claro em fundos brancos
- Texto escuro em fundos escuros
- Qualquer cor de texto que não tenha pelo menos 4,5:1 de taxa de contraste
Obrigatório
- Tema claro por padrão (brancos quentes: #FAFAF9, #F8F6F1, #ffffff)
- Use as cores extraídas da marca da agência APENAS para acentos (botões, bordas), não fundos
- Cores de acento de fallback: marinho (#1E3A5F), terracota (#C2703A), verde floresta (#2D5A47)
- Texto do corpo: sempre escuro (#1a1a1a ou slate-900) em fundos claros
- Responsivo para dispositivos móveis (testar na largura de 375px)
- Sem emojis em nenhum lugar