Executando verificação de segurança...
1

Pitch: Construí uma plataforma que analisa contratos de aluguel com IA e consenso de 4 análises paralelas

Fala, pessoal! Sou dev solo e, nos últimos meses, construí o Direitos do Inquilino — uma plataforma que recebe o contrato de aluguel do usuário (PDF, DOCX ou fotos), extrai o texto via OCR e roda 4 análises de IA em paralelo para identificar cláusulas abusivas com base na Lei do Inquilinato (8.245/91).

A ideia surgiu de uma experiência pessoal: descobri que meu próprio contrato tinha cobranças ilegais — taxa de administração repassada ao inquilino, fundo de reserva e pintura obrigatória na devolução. Pesquisando, vi que a maioria dos contratos no Brasil tem pelo menos uma cláusula abusiva, e a maioria dos inquilinos simplesmente não sabe.

Decidi automatizar o que um advogado faria manualmente: ler o contrato, cruzar com a lei e apontar o que está errado.

Neste post, vou abrir toda a arquitetura, stack, decisões técnicas e os motivos de cada escolha. No final, quero ouvir sugestões, críticas e ideias de vocês.


O que a plataforma faz

O usuário faz upload do contrato e recebe:

  • Score de risco de 0 a 100 calculado pela gravidade das cláusulas
  • 22+ categorias verificadas: multa rescisória, IPTU, condomínio (fundo de reserva, obras, despesas extraordinárias), reajuste, pintura, garantias, entre outras
  • Estimativa de valores a recuperar (mínimo e máximo)
  • Fundamentação legal com artigos da Lei 8.245/91 e jurisprudência do STJ
  • Até 8 documentos prontos: relatório PDF, notificação extrajudicial, petição inicial, checklist de provas, cálculos de correção monetária, aditivo contratual e mais

O tier gratuito mostra a quantidade de problemas e o score de risco. Para ver a análise completa com valores e documentos, o usuário paga R$ 39,90 por relatório ou R$ 99,90 pelo pacote completo com relatório, advocacia com petição e documentos judiciais.


Arquitetura geral

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│   Browser    │────▶│   Vercel     │────▶│   AWS S3     │
│  (Next.js)   │     │  Functions   │     │  (uploads)   │
└──────────────┘     └──────┬───────┘     └──────┬───────┘
                            │                     │
                            ▼                     ▼
                     ┌──────────────┐     ┌──────────────┐
                     │  Neon PgSQL  │     │   AWS SQS    │
                     │  (database)  │     │   (queue)    │
                     └──────────────┘     └──────┬───────┘
                                                  │
                                                  ▼
                                          ┌──────────────┐
                                          │  AWS Lambda  │
                                          │  OCR + IA    │
                                          └──────────────┘

O fluxo em produção é assíncrono: o upload vai para o S3, uma mensagem entra na fila SQS, e a Lambda processa em background (OCR + análise). Isso desacopla o upload do processamento pesado e permite escalar a Lambda independentemente.

Em desenvolvimento, o processamento é síncrono direto na Vercel Function para facilitar o debug.


Stack completa e por que cada escolha

Framework: Next.js 15 (App Router)

Escolhi Next.js pelo combo Server Components + API Routes + SSG para o blog. O App Router permite Server Components que reduzem o bundle JS enviado ao cliente, e as API Routes servem como BFF sem precisar de um backend separado.

A alternativa seria um backend Express/Fastify separado, mas como dev solo, manter um monolito Next.js simplifica muito o deploy e o desenvolvimento.

Linguagem: TypeScript 5.3

Type safety de ponta a ponta. Desde o schema Prisma (que gera tipos automaticamente) até os componentes React, passando pelo payload da Lambda. Zod complementa com validação em runtime nos inputs de API.

Banco de dados: PostgreSQL (Neon) + Prisma 5

PostgreSQL pela robustez, JSONB para armazenar resultados de análise (que são estruturas complexas) e full-text search para o blog. Neon como provider pela compatibilidade com Prisma, branching para staging e o plano gratuito generoso para começar.

Prisma como ORM pela DX absurda: schema declarativo, migrations automáticas, tipos gerados, Prisma Studio para debug. O tradeoff é performance em queries muito complexas, mas para o caso de uso atual, é mais que suficiente.

Autenticação: NextAuth v5 (Auth.js)

Implementei autenticação própria com email + senha + verificação por código OTP via e-mail. Também há OAuth com Google e Facebook. NextAuth gerencia sessions no banco via Prisma adapter.

A alternativa seria Clerk (que usei inicialmente no planejamento), mas para ter controle total sobre o fluxo de onboarding, e-mails e UX, preferi o NextAuth customizado.

IA com consenso de 4 análises

Essa é a parte mais interessante tecnicamente. Não uso apenas uma chamada de IA — rodo 4 análises em paralelo com o mesmo prompt e depois aplico um algoritmo de consenso:

1. Dispara 4 chamadas paralelas à IA
2. Cada análise retorna uma lista de cláusulas problemáticas
3. Para cada cláusula, faço match por categoria + artigo da lei
4. Conto quantas das 4 análises concordam
5. Só confirmo a cláusula se houver no mínimo 2 concordâncias
6. Severidade = média ponderada das análises concordantes
7. Valores = range consolidado do consenso

Por que 4 análises e não 1? LLMs são probabilísticos. Uma única análise pode:

  • Inventar um artigo de lei que não existe
  • Classificar severidade de forma inconsistente
  • Deixar passar uma cláusula abusiva óbvia
  • Encontrar um problema onde não existe

Com 4 análises e consenso, a confiabilidade sobe drasticamente. Se 3 de 4 análises concordam que a cláusula de pintura é abusiva, citando o Art. 23, III, posso confiar muito mais do que em uma análise isolada.

Proteção contra prompt injection: O texto do contrato é sanitizado antes de ser enviado à IA. Tenho detecção de padrões de injeção, normalização de texto e limites de tamanho (mín. 100, máx. 150.000 caracteres). O system prompt é reforçado com instruções anti-manipulação.

OCR: Google Cloud Vision API

Para contratos enviados como imagem ou foto do celular, uso a Vision API com DOCUMENT_TEXT_DETECTION + TEXT_DETECTION. A accuracy para português é muito superior ao Tesseract, especialmente para fotos de celular com iluminação ruim ou ângulo torto.

PDFs e TIFFs usam a Files API (multi-página), imagens individuais usam a Images API. Custo: ~$0,0015 por página.

Um desafio específico foi fotos do iPhone: o formato HEIC não era suportado inicialmente, e o canvas do Safari mobile falhava silenciosamente ao tentar processar fotos de 48MP. A solução foi usar createImageBitmap como estratégia primária (melhor gerenciamento de memória no Safari) com fallback para Image + canvas.

Para múltiplas fotos, o frontend mescla todas em um PDF via jsPDF antes de enviar, garantindo que o OCR use a Files API (que tem melhor accuracy para documentos multi-página).

Pagamentos: Stripe + Asaas (gateway duplo)

Cartão de crédito  →  Stripe (3,99% + R$ 0,39)
PIX                →  Asaas  (0,99%)
Boleto             →  Asaas  (R$ 2,49 fixo)

PIX representa a grande maioria dos pagamentos. Asaas é um gateway brasileiro com PIX nativo, QR Code, copia-e-cola. Stripe para cartão pela DX superior (SDK, webhooks, disputas).

Ambos os gateways disparam webhooks que atualizam o status da compra no banco. O sistema de cupons suporta desconto percentual, valor fixo e preço final fixo, com limites de uso por usuário e global.

Email: AWS SES + React Email + Nodemailer

E-mails transacionais (verificação, confirmação de pagamento, análise concluída) e e-mails de engajamento (lembretes, abandono de checkout, cross-sell) — todos via AWS SES.

Os templates são construídos com React Email e renderizados server-side. Cada e-mail tem tracking de abertura (pixel 1x1) e cliques (redirect via API). Há sistema de unsubscribe compatível com a RFC 2369.

Cron jobs na Vercel cuidam dos envios agendados:

  • Lembretes pós-análise (10min, 1h, 24h, 48h)
  • Recuperação de checkout abandonado (1h, 6h, 24h)
  • Notificação de cláusulas urgentes
  • Atualização de índices econômicos (IGP-M, IPCA)

PDF: pdf-lib (server) + jsPDF (client)

No servidor, pdf-lib gera os relatórios profissionais, petições e notificações com formatação jurídica. No cliente, jsPDF mescla fotos em PDF para upload.

Para o pacote advocacia, JSZip empacota múltiplos PDFs em um ZIP para download único.

Geração de documentos jurídicos

Além do relatório de análise, a plataforma gera:

  • Notificação extrajudicial: documento formal para enviar ao locador;
  • Petição inicial: modelo pronto para Juizado Especial Cível;
  • Cálculos de correção monetária: com cenários IGP-M, IPCA e SELIC;
  • Checklist de provas: lista de documentos para fundamentar uma ação;
  • Aditivo contratual: sugestões de cláusulas protetivas;

Cada documento é gerado dinamicamente com os dados específicos do contrato analisado.


Providers e infraestrutura

ProviderUsoMotivo
VercelHosting Next.jsDeploy zero-config, edge functions, analytics integrado
AWS S3Upload de arquivosLifecycle de 24h (auto-cleanup), presigned URLs
AWS SQSFila de processamentoDesacopla upload do processamento, retry automático
AWS LambdaOCR + análise de IAEscala independente, paga por execução
AWS SESE-mail transacionalCusto baixo ($0,10/1000 e-mails), alta entrega
NeonPostgreSQL managedBranching, compatível com Prisma, plano free
CloudflareDNS + WAF + cacheDDoS protection, page rules, SSL automático
IAAnálise de contratosMelhor custo-benefício para análise jurídica em PT-BR
Google VisionOCR de documentosMelhor accuracy para português
StripeCartão de créditoSDK robusto, webhooks, disputas
AsaasPIX + BoletoGateway BR, PIX nativo

Funcionalidades que achei interessantes de implementar

Sistema de afiliados

Cada usuário tem um código de referral único. Quando alguém compra usando o link do afiliado, o referenciador ganha 10% de comissão. Há dashboard de acompanhamento, período de cooling de 7 dias (CDC) antes da comissão ficar disponível, e sistema de saque via PIX.

Blog com 50+ artigos e SEO

O blog tem artigos estáticos gerados no build sobre temas como "Quem paga o IPTU no aluguel?", "Fundo de reserva: obrigação do inquilino?", etc. Cada artigo tem metadata SEO, tags, e um RSS feed. O blog serve como canal de aquisição orgânica e já está ranqueando para termos relevantes.

Detecção de tráfego de IA

Implementei tracking que identifica quando crawlers de IA (ChatGPT, Claude, Perplexity) acessam artigos do blog, separando esse tráfego do orgânico nas métricas.

Cálculo de reajuste com índices reais

A plataforma busca automaticamente via cron os índices IGP-M, IPCA e SELIC atualizados, e calcula cenários de reajuste do aluguel comparando qual índice é mais favorável ao inquilino.

Cache por hash de arquivo

Antes de processar, calculo o MD5 do arquivo. Se o mesmo contrato já foi analisado antes, retorno o resultado cacheado sem gastar com OCR e IA novamente. Isso reduz custos significativamente para reenvios.


Números e métricas

  • Custo médio por análise: R$ 0,15 a R$ 0,40 (OCR + 4x IA)
  • Tempo médio de processamento: 45 a 90 segundos
  • Precisão do consenso: ~85% de concordância entre as 4 análises
  • Taxa de OCR bem-sucedido: ~95% (fotos com boa iluminação)
  • Uptime: 99,9% (Vercel + Lambda)

Desafios que enfrentei

1. Safari mobile e position: fixed: O Safari iOS tem um bug onde position: fixed + transform faz o elemento flutuar durante o scroll. Descobri que o Tailwind aplica transform implicitamente com a classe transform, criando um novo containing block que quebra o fixed positioning.

2. Fotos do iPhone (HEIC/48MP): O Safari mobile falha silenciosamente ao tentar renderizar fotos de 48MP em canvas. A solução foi usar createImageBitmap como estratégia primária, que gerencia memória muito melhor no Safari.

3. Prompt injection em contratos: Alguns contratos digitais têm texto oculto ou metadata que pode confundir a IA. A sanitização precisa ser agressiva sem perder informação relevante.

4. Timeout do Vercel: Funções serverless têm limite de tempo. A solução foi mover o processamento pesado para Lambda via SQS, mantendo a Vercel Function apenas como gateway.

5. Consenso de IA: Implementar o merge de 4 análises diferentes exigiu um algoritmo robusto de matching que lida com variações de nomenclatura, artigos citados de formas diferentes e severidades discordantes.


O que vem por aí

  • Análise de boletos de condomínio: identificar cobranças indevidas em boletos/faturas
  • Marketplace de advogados: conectar usuários com advogados especializados
  • API pública: para imobiliárias e escritórios de advocacia integrarem

Quero ouvir vocês

Se você chegou até aqui, muito obrigado! O projeto está em produção e com usuários reais. Quero genuinamente ouvir:

  • Críticas: o que está ruim? O que faria diferente?
  • Sugestões de features: o que agregaria valor?
  • Melhorias técnicas: alguma stack ou abordagem melhor?
  • Segurança: vê alguma brecha?
  • UX: algo que incomoda na experiência?

Pode ser brutal, feedback honesto é o que faz evoluir.


Cupom exclusivo para a comunidade TabNews

Para quem quiser testar a análise completa do próprio contrato de aluguel:

TABNEWS202650% de desconto em qualquer plano

Projeto no LinkedIn: linkedin.com/company/direitosdoinquilino


Se tiver interesse em discutir algum aspecto técnico com mais profundidade (o algoritmo de consenso, a pipeline de OCR, o sistema de pagamentos duplo, etc.), respondo nos comentários!

Carregando publicação patrocinada...