PortalPro: Portal do Cliente
Venda a cada contador, advogado e agência o portal que eles nunca tiveram, e receba mensalidade por isso.
Capturas de tela








Sobre o produto
O problema que você vai vender
Todo prestador de serviço recorrente, contador, advogado, agência, consultor, tem o mesmo buraco operacional. O cliente some. Cobra resposta no WhatsApp às 22h. Pergunta "e o boleto?" pela quinta vez. O documento que era para ter chegado no dia 5 chega no dia 28, e o fechamento atrasa por causa dele.
O escritório não tem onde centralizar isso, então usa três ferramentas: e-mail para mandar documento, drive para guardar, grupo de WhatsApp para cobrar. Nas três ele perde tempo, e no fim do mês perde dinheiro, porque a mensalidade também é cobrada na mão, uma a uma.
O PortalPro fecha esse buraco com uma coisa só: o portal que o escritório entrega ao cliente dele.
Como o dinheiro anda
Existem dois níveis de cobrança na mesma instalação, e eles nunca se cruzam.
Nível 1, você cobra os escritórios. Você publica os seus planos, cadastra os escritórios e cobra a assinatura mensal deles com o seu gateway. Essa é a sua receita recorrente, e ela aparece na primeira tela do seu painel.
Nível 2, cada escritório cobra os clientes dele. O escritório conecta a conta de pagamento dele numa tela do próprio produto, define valor e dia de vencimento por cliente, e a cobrança recorrente roda ali. O dinheiro cai direto na conta dele: nada passa por você e nada passa pela Deplo.
As duas credenciais vivem em tabelas diferentes, cifradas em AES-256-GCM, e são lidas por funções diferentes de propósito, não existe uma função que receba "o nível" como parâmetro. É o que impede que uma cobrança do escritório saia assinada com a sua chave, ou o contrário.
Isso é medido, não afirmado: o teste sobe um gateway falso em HTTP de verdade e
confere o cabeçalho Authorization de cada cobrança. A cobrança da mensalidade
sai com Bearer sk_.._DO_ESCRITORIO; a cobrança da assinatura sai com
Bearer sk_.._DO_DONO.
E nada é liberado antes da confirmação: o que muda o status de uma mensalidade é sempre o webhook assinado do gateway. Gerar o link de pagamento não ativa nada. Mudar o valor no painel não ativa nada. Só o banco confirma.
O que cada papel enxerga
Você, dono da instalação
- Visão geral, receita recorrente, escritórios ativos, em teste e em atraso, uso total de disco e quantos clientes finais o sistema atende.
- Escritórios, a lista, o detalhe de cada um (uso contra o limite do plano, responsáveis, último acesso), trocar de plano, gerar nova senha e mudar a situação.
- Planos, nome, preço, ciclo e os três limites que valem de verdade: clientes, espaço em disco e pessoas na equipe.
- Recebimento, a sua conta de pagamento e o endereço do seu webhook.
- Configurações, a marca e os textos da sua página pública de venda.
O escritório, seu cliente
- Visão geral, quantos clientes, quantas pendências atrasadas, quantas mensagens não lidas e quanto entrou no mês.
- Clientes, cadastro (com senha gerada na hora), detalhe com o mês do cliente, e a mensalidade de cada um.
- Documentos, enviar, organizar por competência, marcar visível ou interno, baixar e apagar.
- Pendências, registrar o que está esperando, com prazo; cobrar (vai para a conversa do cliente) e dar baixa depois de conferir.
- Mensagens, uma conversa por cliente, registrada.
- Recebimento, a conta de pagamento dele e o que já entrou no mês.
- Página pública, nome, cor da marca e contato; com prévia na tela.
- Contato e políticas, as três páginas de LGPD, que ele escreve e publica.
- Equipe, quem mais do escritório entra no painel.
- Meu plano, uso contra o limite e a troca de plano.
O cliente do escritório
- Meu mês, a tela que define o produto: os documentos da competência, o que o escritório está esperando e a mensalidade, em três blocos. No celular eles empilham e a pendência atrasada sobe para o topo.
- Documentos, o histórico completo, agrupado por mês, com download.
- Pendências, o que falta enviar, com prazo, e o envio do arquivo.
- Mensagens, a conversa com o escritório.
- Mensalidade, valor, vencimento, histórico de recibos e link de pagamento.
O que está provado
A suíte roda contra Postgres de verdade, nunca contra mock de banco. São 95
testes em 10 arquivos, e cada arquivo teve um controle negativo: o defeito
foi introduzido de propósito, a suíte quebrou, e só então o código foi
restaurado (os números estão em RELATORIO.md).
- Isolamento entre escritórios em todos os recursos, cliente, pasta, documento, pendência, mensagem, mensalidade, página e credencial de gateway. Para cada um: ler, editar e apagar o recurso do outro responde 404, e o recurso original continua intacto depois.
- Gate de acesso, quem não tem mensalidade confirmada não baixa documento do escritório; o arquivo que o próprio cliente enviou nunca é bloqueado.
- Download seguro, caminho com
./é recusado, rota sem sessão responde 401, e arquivo de outro escritório responde 404 (não 403: um 403 confirmaria que o id existe). - Webhook, assinatura inválida responde 401 e nada é gravado; evento repetido é idempotente; evento de um escritório assinado com o segredo de outro é recusado; timestamp fora da janela é recusado.
- Cifra, a chave é gerada exatamente como o motor de deploy gera
(
randomBytes(64).toString('base64url'), não hexadecimal) e cifra de verdade. O controle negativo trocaresolveKeyporBuffer.from(raw, 'hex')e os 7 testes do arquivo quebram, é o defeito real que derrubou cinco produtos anteriores. - Primeiro acesso, token errado responde 401; seis
setupsimultâneos criam um dono só (transação SERIALIZABLE); semINSTALLATION_TOKENno ambiente, tudo é recusado. - Limites de plano, estourar clientes bloqueia o cadastro, estourar disco bloqueia o upload, e subir de plano libera na hora.
- Pendências, vencem sozinhas ao passar do prazo, sem cron; o cliente entrega, o escritório dá baixa, e o cliente não consegue dar baixa.
- Páginas de LGPD, nascem como rascunho, respondem 404 na rota pública enquanto não forem publicadas, e o texto de partida diz que o controlador dos dados é o escritório.
Além da suíte, cinco coisas foram medidas na instalação real rodando em Docker,
com as imagens construídas e os segredos no formato do motor: CORS restrito ao
FRONTEND_URL, os quatro cabeçalhos de segurança no nginx, o SPA compilado
dentro da imagem, as cores de destaque lidas com getComputedStyle na tela, e
uma instalação de ponta a ponta até salvar uma credencial de gateway com
sucesso. Os números estão em RELATORIO.md.
O que o produto não faz
Dito na frente, para ninguém descobrir depois:
- Não é armazenamento de vídeo. São arquivos pequenos de escritório. PDF, XML, planilha, de até 20 MB cada.
- Não envia WhatsApp nem e-mail. A conversa e os avisos ficam dentro do portal. Não há integração de mensageria.
- Não assina documento digitalmente e não integra com certificado ICP.
- Fala o protocolo do Stripe. Outro gateway exige adaptação de código.
- Não emite nota fiscal e não calcula imposto.
Recursos em destaque
Casos de uso
- ◆Escritório de contabilidade que publica DAS, guia de INSS, folha e relatório por competência, cobra o extrato que sempre atrasa e recebe a mensalidade de cada empresa atendida no gateway dele.
- ◆Escritório de advocacia que entrega petições, contratos e comprovantes sem anexo de e-mail, e cobra procuração assinada com prazo visível para os dois lados.
- ◆Agência de marketing que publica relatório mensal e nota fiscal, cobra o material do cliente com data e recebe o fee mensal por recorrência, sem perseguir boleto.
- ◆Consultor independente que mantém um portal por cliente com entregáveis, pendências e a mensalidade do contrato, com a marca dele.
Perguntas frequentes
Quem fica com o dinheiro da mensalidade dos clientes dos escritórios?▾
O escritório. Ele conecta o gateway dele e o pagamento vai direto para a conta dele. Você, dono da instalação, cobra só a assinatura que o escritório paga a você, com o seu gateway, em outra credencial.
Preciso configurar alguma coisa para cada escritório?▾
Não. Você cadastra o escritório, entrega o e-mail e a senha gerada, e ele configura a conta de recebimento dele numa tela do próprio produto. Se ele não configurar, o portal continua servindo para documentos, pendências e mensagens, só a cobrança fica indisponível, com o aviso na tela.
O que acontece quando um escritório atrasa a assinatura?▾
O portal dele sai do ar para os clientes dele, com um aviso que explica o motivo e diz que nada foi perdido. O escritório continua entrando no painel e vendo tudo. Quando o pagamento entra, os clientes voltam a acessar sozinhos.
Os arquivos ficam onde?▾
No disco da sua VPS, num diretório por escritório, fora de qualquer pasta servida pelo servidor web. Não existe URL adivinhável: o download passa por uma rota autenticada que confere o escritório dono e a visibilidade.
Que tipo de arquivo o sistema aceita?▾
PDF, XML, CSV, TXT, XLS, XLSX, ODS, DOC, DOCX, JPG, PNG e ZIP, de até 20 MB cada. O tipo e o tamanho são validados no servidor, não só no navegador. Não é um produto de vídeo: são os arquivos pequenos do dia a dia de um escritório.
Posso usar outro gateway que não o Stripe?▾
A integração entregue fala o protocolo do Stripe (checkout, assinatura e webhook assinado). Outro gateway exige adaptação de código, está fora do que vem pronto.
O produto envia dados para vocês?▾
Não. Não há telemetria, validação de licença nem qualquer chamada para a Deplo. A única saída de rede é para o gateway de pagamento configurado por você ou pelo escritório.
O mesmo e-mail pode ser cliente de dois escritórios?▾
Pode, com contas e senhas independentes, inclusive no mesmo navegador.
Conta gratuita, sem cartão. Você precisa de uma VPS própria com acesso SSH.