← Voltar ao catálogo
Produtividade

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

Portal do cliente na cor do escritório: documentos do mês, o que o escritório espera com um extrato atrasado há 4 dias, e a mensalidade de R$ 349,00 em dia.Visão geral do escritório: 4 clientes, 4 pendências atrasadas, 2 mensagens não lidas e R$ 827,00 recebidos no mês.Visão geral do dono da instalação: receita recorrente de R$ 299,00, um escritório ativo, nenhum em atraso e 48 KB de disco usados.Pendências agrupadas em Atrasadas, Vencem hoje, No prazo e Entregues, com a barra vermelha à esquerda das atrasadas.O mês de um cliente visto pelo escritório: documentos, mensalidade com histórico de recebimentos e pendências com os botões Cobrar e Dar baixa.Planos com três cartões mostrando preço e os limites de clientes, disco e equipe que o sistema aplica de verdade.Página pública do PortalPro com a proposta de valor e uma amostra do portal que o cliente do escritório enxerga.O portal do cliente a 380 pixels de largura, com os três blocos empilhados e a pendência atrasada no topo.

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 troca resolveKey por Buffer.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 setup simultâneos criam um dono só (transação SERIALIZABLE); sem INSTALLATION_TOKEN no 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

✓Dois níveis de cobrança isolados: você cobra os escritórios, cada escritório cobra os clientes dele. As credenciais são cifradas em AES-256 e nunca se cruzam.
✓A mensalidade do cliente só fica ativa quando o aviso assinado do gateway confirma, nunca por clique, nunca de forma otimista.
✓Cada cliente entra com login próprio e enxerga só o que é dele: um identificador válido em mãos não abre porta nenhuma.
✓Documento nenhum fica em pasta pública. O arquivo só sai por rota autenticada, que confere o escritório dono e a visibilidade antes de abrir.
✓O que o escritório marca como interno o cliente não vê, nem na listagem, nem por link direto.
✓A pendência vira atrasada sozinha, calculada na leitura: sem cron, sem processo de fundo, sem ninguém para lembrar.
✓Assinatura em atraso tira o portal do ar, mas não apaga um documento sequer, e tudo volta com o pagamento.
✓Limites de plano que valem de verdade: clientes, espaço em disco e usuários da equipe são aplicados, e a recusa diz qual limite estourou.
✓LGPD resolvida: contato, privacidade e termos são escritos pelo escritório e nascem como rascunho não publicado.
✓Roda inteiramente na sua VPS: nenhuma chamada para a Deplo, nenhuma telemetria, nenhuma validação de licença.

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.

No plano grátisGrátis
Testar grátis

Conta gratuita, sem cartão. Você precisa de uma VPS própria com acesso SSH.