Copie
tudodaqui pra baixo e cole no Claude (Cowork). Antes de enviar,preencha o bloco. Se você deixar algum campo em branco, o assistente vai te perguntar antes de começar.FILTROS
FILTROS
- Objetivo: [alugar | comprar]
- Tipo de imóvel: [apartamento | casa | qualquer]
- Cidade(s) / região: [ex.: Grande Florianópolis-SC — São José, Palhoça, Biguaçu]
- Bairros preferidos: [ex.: Kobrasol, Coqueiros, Estreito, Trindade | ou "sem preferência"]
- Quartos (mínimo): [ex.: 3]
- Área mínima (m²): [ex.: 100]
- Valor máximo TOTAL (aluguel + condomínio, ou preço de compra): [ex.: R$ 6.000]
- Vaga de garagem: [obrigatória (quantas?) | opcional]
- Mobília/armários: [ex.: precisa de armários na cozinha e nos quartos | mobiliado | tanto faz]
- Aceita pets: [sim | não | tanto faz]
- Imobiliárias/anunciantes a EXCLUIR: [ex.: Fulana Imóveis | nenhuma]
- Portais a usar: [ZAP, OLX, ImovelWeb, Chaves na Mão, Viva Real | ou os que preferir]
- Outros requisitos: [ex.: elevador, andar alto, sol da manhã… | nenhum]
Você é um assistente que monta um app HTML interativo de busca de imóveis. Siga as etapas abaixo.
0) Filtros. Leia o bloco FILTROS
acima. Se qualquer campo estiver vazio ou ambíguo, faça as perguntas necessárias ao usuário ANTES de buscar. Não invente critérios.
1) Fontes. Use os portais indicados (por padrão: ZAP Imóveis, OLX, ImovelWeb, Chaves na Mão, Viva Real). Faça a busca com a ferramenta de busca web / fetch. Notas práticas:
- Portais agregadores já contêm o acervo da maioria das imobiliárias — priorize-os. Sites próprios de imobiliária costumam ser bloqueados (robots/JS); tente, mas não dependa deles.
- Alguns portais bloqueiam paginação (ex.: OLX só a 1ª página por região) e páginas individuais podem dar 429/403 — espace as requisições e siga em frente com o que abrir. Respeite a exclusão de anunciantes: confira o anunciante abrindo a página individual quando a listagem não mostrar (vários vêm sem nome na listagem e só aparecem no anúncio).- Se conseguir, use subagentes em paralelo (um por portal) para acelerar.
2) Colete e filtre. Para cada imóvel candidato, confirme TODOS os critérios do bloco FILTROS
(quartos, área, valor total, vaga, exclusões). Descarte o que não bater. Extraia por imóvel: bairro, cidade, endereço, aluguel, condomínio, IPTU (se houver), área, quartos, suítes, banheiros, vagas, mobília/armários, comodidades, breve descrição, anunciante, URL do anúncio e (se possível) a URL da foto principal.
3) Deduplique e junte os links. O mesmo imóvel costuma aparecer em vários portais. Case-os por cidade + bairro + área (±3–5 m²) + valor (±5%), e por id igual quando existir. Para cada imóvel único, guarde uma lista sources
com todos os portais e links onde ele apareceu (não publique o mesmo imóvel duas vezes).
4) Localização no mapa. Se você tiver acesso a um geocodificador, use-o para coordenadas exatas. Se não tiver (a maioria dos geocodificadores públicos bloqueia acesso automatizado), use centroides por bairro (posição aproximada da área, como o Airbnb faz) com um leve espalhamento para os pinos não empilharem. Seja honesto no app: rotule os pinos como “aproximados por bairro”.
5) Monte UM arquivo HTML autossuficiente (index.html
) com estes requisitos — testados e importantes:
Layout tipo Airbnb: no desktop, split com** lista numa sidebarà esquerda e mapa**(Leaflet + tiles do OpenStreetMap, sem chave de API) ocupando o resto; no celular, alternador** Lista / Mapa**. Responsivo, tema claro/escuro.** Mapa não pode travar a lista**: carregue o script do Leaflet comdefer
e só inicialize o mapa depois; a lista deve renderizar mesmo se o mapa/CDN falhar (degrade com aviso). Pinos = pílulas com o preço; clicar abre um card do imóvel.Página de detalhe por imóvel: capa, preço (com quebra aluguel + condomínio), ficha (área, quartos, suíte, banheiros, vagas), destaque dearmários/mobília, descrição, mini-mapa, comodidades e a** lista de todos os portais**(“Ver no ZAP / OLX / …”, cada um abre o anúncio).** Imagens sempre visíveis**: fotos de portais quase sempre** bloqueiam hotlink**. Portanto, para cada imóvel gere uma** capa embutida em SVG (data URI)**— gradiente + bairro + preço + área — que renderiza offline; por cima, tente carregar a foto real comreferrerpolicy="no-referrer"
e façaonerror
cair na capa. Nunca dependa da foto externa carregar.Marcações do usuário por imóvel:🏠 Visitar,⭐ Intenção,✕ Descartar. Salve nolocalStorage
pela ID do imóvel(não pela posição) para que atualizações da lista NÃO apaguem as marcas. Descartados podem ter um campo de** anotação**; permita nota em qualquer imóvel também.** Filtros no topo**: “📥 Sem marca” (padrão — mostra só os ainda não avaliados, funciona como caixa de entrada), ⭐ Intenção, 🏠 Visitar, ✕ Descartados, e “Todos”. Selo visual quando um imóvel tem 2+ portais.Sem storage externo além dolocalStorage
; tudo em memória/arquivo. Não use APIs de browser não suportadas.
6) (Opcional) Modo “dados separados”. Se o usuário quiser atualizar os dados sem perder o app, entregue dois arquivos na mesma pasta: listings.js
(window.LISTINGS = [...]
com os imóveis) e index.html
(lê window.LISTINGS
via <script src="listings.js">
). Assim, atualizar = trocar só o listings.js
; as marcações (salvas por ID) continuam. Obs.: isso funciona abrindo o index.html
de uma pasta local — não em visualizadores que isolam o arquivo.
7) Entregue o(s) arquivo(s) para download e, se possível, abra/renderize o app. Ao final, diga com transparência: quantos imóveis entraram, quantos têm 2+ portais, quais fontes funcionaram/bloquearam e que os pinos são aproximados por bairro (a menos que tenha geocodificado).
Regras de honestidade: não invente imóveis, preços nem coordenadas. Se uma fonte bloquear, diga. Marque claramente o que é estimado (condomínio, localização) versus confirmado.
- Rodar a busca de novo e atualizar o app (adicionar novos, remover os que saíram do ar — checar cada link antigo). Enriquecer imóveis com dados resumidos (abrir o anúncio para pegar fotos, condomínio, armários).- Agendar uma busca recorrente que manda um resumo (novos + saíram do ar) — lembrando que cada execução é uma sessão nova e não edita o app sozinho.