# Real Estate Intelligence

Leia o mercado, não só os anúncios.

[HTML](https://leohteixeira.com/pt/projects/real-estate-intelligence) · Leonardo Teixeira

## O produto

Real Estate Intelligence explora lugares, imóveis, anúncios e evidências de preços pedidos. A fundação atual de contratos sintéticos inclui ingestão sintética própria, registros iniciais persistidos de Property e Listing, números de mercado preparados e um tracer isolado de preço estruturado.

Stack: Node.js, NestJS, React, TypeScript, PostgreSQL, RabbitMQ, LangGraph, OpenTelemetry

## O fluxo principal

1. **Comece por um lugar** — Explore a hierarquia sintética de lugares, números preparados, comparação com o lugar pai e série de doze meses. Busca e contagens continuam sendo fixtures identificadas.

2. **Inspecione o imóvel e seu anúncio** — Eventos sintéticos próprios verificados persistem agregados iniciais de um anúncio. Property e Listing são distintos; preços pedidos nunca viram preços de transações.

3. **Rastreie um pedido estruturado de preço** — Execuções duráveis da API e entrega pelo worker chamam um LangGraph isolado por ferramenta de mercado HTTP restrita. Exemplos preparados de sete estados são somente leitura e identificados separadamente.

## Arquitetura

```text
Fonte sintética própria → worker de coleta → PostgreSQL → Property / Listing
React ↔ API NestJS → application → domain · infrastructure implementa portas
Execução Ask durável → worker → LangGraph isolado → ferramenta HTTP Market → API
```

### Quatro aplicações, dependências para dentro

Web React, API NestJS, worker e aplicação de IA isolada usam pacotes domain/application/contracts/infrastructure. Cada contexto de negócio possui seu schema PostgreSQL.

### O backend é dono do número

Cálculos determinísticos ficam no backend. A aplicação de IA não recebe credenciais de banco nem depende da infraestrutura; ferramentas HTTP tipadas expõem capacidades permitidas. Outbox/inbox governam eventos pelo RabbitMQ.

## Disponibilidade e limites

Todos os números desta apresentação são ilustrações sintéticas fixas, não medições do mercado em produção. Processamento de fontes reais, matching de produção, histórico completo e comparáveis não estão habilitados. O tracer não implementa extração de linguagem natural, chamadas a provedores, confirmação, checkpoints completos ou quota de visitantes.

[Abrir demo](https://leohteixeira.com/real-estate-intelligence/places)

Código público não configurado.

## Leia o mercado, não os anúncios.

O Real Estate Intelligence transforma anúncios públicos de imóveis em um mercado que se lê lugar a lugar: preço pedido por metro quadrado, histórico, comparáveis e tempo de anúncio, cada um com a sua fonte e a sua data.

Cada bloco é uma quadra. A altura é a mediana do preço pedido por m².

Dados sintéticos

### 



 · Dados sintéticos

### É a zona que está mexendo, ou só este anúncio?

Corretores e analistas leem um lugar como uma série, não como um feed. Todo agregado diz sobre quantos anúncios se apoia, quais fontes os reportaram e quando foi calculado.

- Mediana do preço pedido por m² por zona, bairro e quadra

- Variação ao longo do tempo, com a amostra por trás de cada ponto

- Tempo de anúncio, remoções e retornos ao mercado

- Mediana do preço pedido: R$ 10.920/m²

- 90 dias: +3,1%

1.284 anúncios · 3 fontes · 9 out. 2026, 06:00 · Dados sintéticos

### Este apartamento está no preço dos vizinhos?

Compradores e investidores veem um imóvel contra os comparáveis ao redor, escolhidos por critérios declarados que dá para ler e alterar. Preço pedido nunca é apresentado como preço de venda.

- Comparáveis com o motivo de cada escolha

- Histórico de preço do anúncio, corte a corte

- Alertas quando um lugar ou imóvel acompanhado muda

- 68 m² · 2 quartos: R$ 785.000

- Contra a mediana do bairro: 7,5% abaixo

- Tempo de anúncio: 64 dias

Mediana R$ 12.480/m² · 212 imóveis · 9 out. 2026, 06:00 · Dados sintéticos

### Três anúncios. Um imóvel. E o porquê.

Para quem avalia a engenharia: imóvel e anúncio são entidades separadas, o histórico é de primeira classe e a resolução de entidades se explica. Toda fusão carrega a sua evidência e pode ser revisada.

- Regras determinísticas de preço, comparáveis e geoespacial no backend

- Snapshots brutos e proveniência guardados para reprocessar e auditar

- Traces em requisições HTTP, jobs, coletores e chamadas de modelo

- Fonte A · visto em 6 ago.: R$ 785.000

- Fonte B · visto em 11 ago.: R$ 790.000

- Fonte C · voltou ao mercado em 2 out.: R$ 785.000

- Resolvidos como um imóvel: match 0,91

Mesma faixa de numeração · 68 m² · 7º andar · Dados sintéticos

### O que rodou, o que mudou e o que falhou?

Quem opera os dados vê a coleta como trabalho contado. As execuções são idempotentes e têm checkpoint, a concorrência é um número visível de vagas e nada é buscado fora dos termos da fonte.

- Limites de taxa, novas tentativas com backoff e desligamento gracioso

- Reprocessamento a partir dos snapshots brutos, isolado das ações de rotina

- Fila de revisão para as fusões que as regras não resolveram

- Última execução: 9 out. 2026, 06:00

- Snapshots lidos: 1.284

- Alterados: 212

- Com falha: 0

Robots, limites de taxa e licenciamento respeitados por fonte · Dados sintéticos

## Pergunte em linguagem natural. Receba uma execução auditável.

Uma pergunta não abre um chat. Ela vira um pedido tipado que você confirma, um cálculo feito pelo backend e uma explicação marcada como escrita por um modelo.

- **Pergunta**: Qual é o preço por metro quadrado de apartamentos de dois quartos em Pinheiros?

- **Aguardando você**: Interpretada como um pedido de preço por m². A confiança ficou abaixo do limiar de 0,85, então a execução pausou para confirmação. (Lugar · Pinheiros; Tipo · apartamento; Quartos · 2)

- **Concluída**: R$ 12.480/m² de mediana do preço pedido — Calculado pelo backend · 212 imóveis · 9 out. 2026, 06:00

- **Explicação**: Os preços pedidos em Pinheiros ficam acima da mediana da Zona Oeste, e a maior parte da amostra foi anunciada nos últimos 90 dias. — Escrita por um modelo sobre o número acima. O modelo não produziu o número.

## Quatro regras que o produto não dobra.

### Pedido não é venda.

Um anúncio traz um preço pedido. O preço de venda só aparece quando uma fonte reporta a transação, e os dois nunca entram na mesma média.

### O modelo explica. Nunca calcula.

Medianas, comparáveis e filtros geoespaciais são regras determinísticas do backend. Um modelo pode rotear uma pergunta ou explicar um resultado.

### A quadra, nunca a unidade.

Um imóvel é localizado até a quadra e a faixa de numeração. Nenhuma tela marca uma porta.

### A fonte dita os termos.

Os coletores seguem robots, limites de taxa e licenciamento. Em desenvolvimento, o produto roda sobre dados sintéticos.

Construído: ingestão sintética própria, imóveis e anúncios iniciais persistidos, números de mercado preparados e um tracer isolado de preço estruturado.

Não habilitados: fontes reais, matching de produção, histórico completo e comparáveis. Os números são sintéticos; a jornada em linguagem natural ilustra a experiência planejada.
