Vale a pena comprar aquela empresa que está à venda?
Você acha um anúncio: padaria em João Pessoa, R$ 500 mil, "fatura R$ 120 mil por mês". O anúncio não diz se o preço faz sentido. Este projeto diz.
Cola a URL do anúncio ou digita os números à mão, e sai um índice de compra de 0 a 100 com o fluxo de caixa por trás: VPL, TIR, payback e os critérios eliminatórios — aqueles que reprovam o negócio independentemente do resto.
- Valuation de verdade, não regra de bolso: fluxo de caixa projetado, custo de capital,
financiamento, capital de giro e saída. O cálculo é auditável em
public/js/calculo.js. - Base de 2.544 anúncios reais conferidos, o Brasil inteiro, por cidade e UF.
- Importação por URL: lê a página do anúncio e extrai nome, preço, faturamento e categoria. Allowlist de domínio contra SSRF.
- Consulta de CNPJ em três fontes da Receita em paralelo: situação, idade, porte, regime, sócios, e os alertas que isso levanta.
- Paywall por créditos com cobrança via Mercado Pago — o pagamento é sempre reconferido na API do gateway, nunca confiando só no webhook.
Precisa de JDK 21. Nada mais — nem Maven, nem banco, nem Docker.
./mvnw -DskipTests package
STORE=file java -jar target/valorjusto.jarNo Windows (PowerShell): .\mvnw.cmd -DskipTests package e depois
$env:STORE="file"; java -jar target\valorjusto.jar.
Abre http://localhost:8080/. O estado vai para data/*.json — é o modo de
desenvolvimento, sem as garantias do banco.
Com Postgres é docker compose up. Os detalhes estão na
documentação de arquitetura.
| Camada | Escolha | Por quê |
|---|---|---|
| Backend | Java 21, Spring Boot 3.5 | pacote único, uma classe por responsabilidade |
| Banco | PostgreSQL com o cadastro em JSONB | SQL explícito, sem JPA |
| Front | HTML/CSS/JS, sem framework e sem bundler | a ordem de carga é a lista de <script> |
| Deploy | um container por responsabilidade, ou imagem única | docker compose ou qualquer PaaS |
Sem framework no front e quase sem dependência no back: o projeto foi zero-dependência por muito tempo, e Spring entrou por decisão explícita, não por hábito.
./mvnw test
bash ferramentas/smoke.shO smoke.sh sobe um servidor limpo e percorre o contrato de cada rota — paywall, permissão
de escrita, crédito, rate-limit e CSP. É o que pega o que quebra em silêncio. Os dois rodam
na CI a cada push e pull request, junto com o build das imagens Docker e um grep que
garante que nenhum <script> inline ou atributo on* voltou para o public/.
A documentação de arquitetura tem o resto: estrutura de arquivos, todas as rotas da API, como a base de anúncios foi coletada e filtrada, o modelo financeiro, as decisões de segurança e os dois caminhos de deploy.
Funciona e está em uso. A tradução da DATABASE_URL — onde errar significa mandar a senha
do banco em texto puro — é lógica pura em UrlPostgres, coberta por teste unitário que não
precisa de banco: loopback em qualquer grafia, IPv6 literal, nome de serviço do compose e
sslmode escrito à mão têm caso de teste cada um.
