Marketplace imobiliário multi-tenant para o Paraguai
A MVP Plus construiu o VendePy, SaaS imobiliário multi-tenant para o Paraguai, com isolamento por RLS, cobrança via Stripe e interface bilíngue PT/ES.
Destaques técnicos
- Isolamento multi-tenant reforçado por políticas de Row Level Security no Postgres
- Interface bilíngue português/espanhol com next-intl
- Assinatura e cobrança recorrente via Stripe
- Script dedicado de teste de isolamento entre tenants, além de suíte e2e com Playwright
O VendePy é um SaaS imobiliário multi-tenant construído pela MVP Plus para o mercado paraguaio: cada imobiliária tem seu próprio site, CRM de leads e gestão de propriedades dentro da mesma plataforma, com a interface disponível em português e espanhol.
O desafio
Um SaaS vertical para imobiliárias enfrenta o mesmo problema estrutural de qualquer produto multi-tenant: cada imobiliária precisa enxergar só os próprios imóveis, leads e usuários, mesmo compartilhando a mesma infraestrutura e o mesmo banco de dados que todas as outras. Um vazamento de isolamento nesse tipo de produto não é só um bug de interface, é uma imobiliária vendo dado comercial de outra.
Construir para o mercado paraguaio soma uma segunda camada ao problema: a plataforma precisa funcionar de verdade em espanhol e em português, não como tradução de interface encaixada depois, mas como parte da arquitetura de conteúdo desde o início do projeto.
O que construímos
O VendePy entrega, para cada imobiliária, site próprio, CRM de leads e gestão de propriedades e equipe, tudo dentro de uma única aplicação multi-tenant. A cobrança das assinaturas roda no Stripe, com os planos e ciclos de cobrança recorrente da plataforma. A interface é bilíngue de fato, com next-intl estruturando português e espanhol como parte do roteamento e do conteúdo da aplicação, não como camada de tradução por cima.
A engenharia por trás
O isolamento entre imobiliárias é reforçado em duas camadas: pela modelagem multi-tenant no Prisma e por políticas de Row Level Security aplicadas diretamente no Postgres do Supabase, versionadas como scripts SQL no próprio repositório, entre habilitação de RLS e políticas específicas por tenant. Isso significa que mesmo uma consulta mal escrita na camada de aplicação ainda esbarra na regra de isolamento no nível do banco, uma segunda linha de defesa que não depende de lembrar de filtrar por tenant em todo lugar do código.
Essa garantia é verificada por um script dedicado de teste de isolamento entre tenants, que roda consultas simulando usuários de imobiliárias diferentes para confirmar que nenhum dado vaza entre elas. Por cima disso, a suíte de testes end-to-end com Playwright cobre os fluxos principais da aplicação no navegador, e testes unitários cobrem partes isoladas da lógica de negócio.
Stack e decisões
Next.js 15 com TypeScript e Prisma sobre Postgres do Supabase é a base, com a versão mais recente do Prisma trazendo melhoria relevante de performance de consulta num produto que filtra por tenant o tempo todo. O Stripe entrou como processador de pagamento pela maturidade em cobrança recorrente internacional, requisito direto de operar num mercado fora do Brasil.
Tratar RLS como camada obrigatória, e não como reforço opcional, foi decisão direta da natureza do produto: um SaaS que vende para imobiliárias concorrentes entre si não pode depender só de disciplina de código para manter os dados de cada uma isolados dos demais.
Produtos multi-tenant como esse, que crescem em complexidade a cada nova imobiliária cadastrada, são o tipo de trabalho contínuo que o Vibe Squad da MVP Plus apoia. Para entender como pensar isolamento de dados desde a modelagem, veja o artigo sobre banco de dados em projetos de Vibe Coding.