17 de 25 · PRODUTO DIGITAL
Milsaca
SaaS sob medida · plataforma multi-tenant
PROJETO AUTORALEM DESENVOLVIMENTO

CONTEXTO
Um setor inteiro rodava no improviso entre planilhas e WhatsApp, sem um sistema único.
O QUE FOI FEITO
SaaS multi-tenant (web + mobile) com painéis por papel, automações e dados seguros (RLS). Prova de que entrego produto complexo de ponta a ponta.
MULTI-TENANT · WEB + MOBILE · RLS
SOLUÇÕES
Multi-tenant via RLS
Isolamento por corretora_id garantido no banco, não na aplicação. RLS em toda tabela.
Laudo COB digital
Motor de classificação da IN 8/2003 (MAPA) em pacote puro, com PDF + QR de verificação pública.
Cotações ao vivo
CEPEA, ICE NY Coffee C e PTAX (BCB) sincronizados via edge function agendada.
Web + mobile, um backend
Next.js 16 e Expo Router compartilhando o mesmo Supabase por um pacote de clients em camadas.
DETALHE TÉCNICO
01Monorepo Turborepo + pnpm com três frentes num só backend: Next.js 16 (App Router) pro web, que sozinho já cobre três painéis (produtor, cor…
Monorepo Turborepo + pnpm com três frentes num só backend: Next.js 16 (App Router) pro web, que sozinho já cobre três painéis (produtor, corretora e admin da plataforma), e Expo Router pro app mobile do produtor. Web e mobile falam com o mesmo Supabase através de um pacote compartilhado (@milsaca/db) com três camadas de client: uma com cookie de sessão pro server, uma sem cookie (só a chave pública) pra rotas com cache, e uma com secure-store pro mobile.
02Multi-tenant de verdade, não só "filtro no WHERE": toda tabela do schema público tem Row Level Security habilitada, sem exceção, com isolame…
Multi-tenant de verdade, não só "filtro no WHERE": toda tabela do schema público tem Row Level Security habilitada, sem exceção, com isolamento por corretora_id garantido no banco, não na aplicação. Papéis (produtor/corretora/admin) vivem num array na tabela de perfil, permitindo o mesmo e-mail acumular mais de um papel; o admin da plataforma fica numa tabela própria, fora do enum de papéis, pra não vazar por engano num RLS mal escrito.
03A decisão de autenticação é um bom exemplo de aprender com o próprio produto: começou com magic link e foi trocada por OTP de 6 dígitos por …
A decisão de autenticação é um bom exemplo de aprender com o próprio produto: começou com magic link e foi trocada por OTP de 6 dígitos por e-mail, porque o Gmail Safe Links faz prefetch automático do link (pra escanear por segurança) e acaba "queimando" o token de uso único antes do usuário clicar. É um bug sutil que só aparece em produção, com e-mails reais.
04O diferencial de domínio é a classificação COB (Instrução Normativa MAPA nº 8/2003): a lógica de tipos, defeitos, peneira e bebida do café c…
O diferencial de domínio é a classificação COB (Instrução Normativa MAPA nº 8/2003): a lógica de tipos, defeitos, peneira e bebida do café cru foi extraída pra um pacote puro (@milsaca/cob), sem dependência de runtime, testável isoladamente. O laudo gerado tem PDF com QR code e uma página pública de verificação, dando ao produtor algo que hoje é feito no papel ou de cabeça.
TELAS

01 Página pública do Milsaca 
02 Painel da corretora (dados de demonstração) 
03 Laudo COB digital do produtor (dados de demonstração)
RESULTADO
SaaS multi-tenant (web + mobile) com painéis por papel, automações e dados seguros (RLS). Prova de que entrego produto complexo de ponta a ponta.
SaaS em desenvolvimento ativo.















