Skip to content

About

Plataforma SaaS Full Stack para gestão de pequenos negócios (CRM, Financeiro, Agenda). React + Node.js + PostgreSQL.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

352 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

BusinessFlow 🚀

Plataforma SaaS Full Stack de Gestão Inteligente

Deploy na Vercel

CI

React Node Prisma PostgreSQL


Dashboard BusinessFlow

💻 Sobre

O BusinessFlow é uma plataforma Full Stack projetada para facilitar a gestão de micro e pequenas empresas, substituindo planilhas desorganizadas por um painel moderno e unificado.

Ele centraliza:

  • Gestão Financeira: Controle de fluxo de caixa com relatórios e validações.
  • CRM: Gestão de clientes com histórico e categorização via tags.
  • Agenda: Organização visual e inteligente de compromissos.
  • Serviços: Catálogo de produtos/serviços com precificação.

Este projeto demonstra domínio na construção de arquiteturas SaaS, integração ponta a ponta, segurança com JWT e validação estrita de dados no backend.


🚀 Stack de Tecnologia

Frontend

  • React.js com Hooks e Context API
  • Styled Components (CSS-in-JS)
  • Recharts (Gráficos interativos e Dashboards)
  • Axios (Interceptors HTTP e tratamento centralizado de erros)
  • JSPDF + AutoTable (Geração de relatórios em PDF)

Backend

  • Node.js + Express
  • Prisma ORM (Modelagem de dados e tipagem)
  • PostgreSQL (Hospedado na Neon.tech)
  • JWT & Bcrypt (Autenticação e segurança de senhas)
  • Zod (Validação de schemas e regras de negócio)

🧭 O que o sistema faz

  • Financeiro: lançamentos, faturas pendentes e atrasadas, e DRE. Uma rotina diária (meia-noite e um) marca como atrasadas as faturas pendentes vencidas.
  • Importação de extrato bancário no formato OFX, e relatórios em PDF gerados no navegador.
  • CRM: clientes por empresa, com status e documentos (upload de arquivos).
  • Agenda e tarefas por cliente e por empresa.
  • Helpdesk: chamados com troca de mensagens entre o escritório e o cliente.
  • Auditoria: registro de quem fez o quê (criar, alterar, excluir) em cada módulo.
  • API pública com chave (x-api-key), para integrações que precisam listar dados da empresa.
  • Dois perfis de acesso: o gestor (ADMIN) e o cliente (CLIENT), que só enxerga o que é da sua empresa.

⚙️ Como rodar localmente

Pré-requisitos: Node.js 18 ou mais novo e um banco PostgreSQL (local ou na nuvem).

1. Back-end

cd backend
npm install

Crie o arquivo backend/.env:

DATABASE_URL="postgresql://usuario:senha@localhost:5432/businessflow"
JWT_SECRET="troque-por-uma-chave-longa-e-aleatoria"
PORT=3001
# Opcional, só para o envio de e-mails:
EMAIL_USER=""
EMAIL_PASS=""

Crie as tabelas, carregue os dados de exemplo e inicie:

npx prisma db push
npx prisma db seed
npm run dev

A API sobe em http://localhost:3001/api. O seed cria um gestor, uma empresa e clientes de exemplo (veja backend/prisma/seed.js). O seed apaga todos os dados antes de criar os de exemplo, por isso recusa rodar em banco que não seja local. A senha dos usuários de exemplo é gerada a cada carga e mostrada no final (ou use SEED_PASSWORD); ela não fica escrita no código.

Migrações do banco

O histórico do banco fica em backend/prisma/migrations (a primeira é 0_init, a foto completa do schema). A CI aplica as migrações em um banco vazio e confere que elas batem com o schema.prisma: quem mudar o schema precisa criar a migração junto:

npx prisma migrate dev --name o-que-mudou

Banco que já existe (criado antes com db push): rode uma única vez, para dizer ao Prisma que o 0_init já está aplicado, sem mexer nos dados:

npx prisma migrate resolve --applied 0_init

Depois disso, o deploy pode usar npx prisma migrate deploy no lugar de db push.

2. Front-end

cd frontend
npm install
npm start

O painel abre em http://localhost:3000 e fala com a API em http://localhost:3001/api. Para apontar para outra API, defina REACT_APP_API_URL.


🧠 Decisões técnicas

Decisão Por quê
Cada dado pertence a uma empresa (companyId em clientes, faturas, documentos, tarefas, chamados e auditoria) Um escritório nunca vê os dados de outro. O middleware de empresa restringe o perfil CLIENT ao que é dele.
JWT de acesso + refresh token guardado no banco Dá para encerrar sessões e renovar o acesso sem pedir a senha de novo.
Camadas de segurança na API: helmet, limite de 300 requisições por 15 minutos, CORS restrito ao front-end e nosniff na pasta de uploads Reduz abuso, ataques simples e arquivos disfarçados.
Validação das entradas com Zod (autenticação) Recusa dados malformados antes de chegarem ao banco.
Log de auditoria que grava o nome e o perfil de quem agiu (não só o id) O histórico continua legível mesmo se o usuário for apagado.
Prisma + PostgreSQL Modelo de dados tipado, relações com exclusão em cascata e consultas seguras.
API pública separada, protegida por chave Integrações recebem só o necessário (por exemplo, nome, documento e e-mail de clientes ativos).

🗺️ Modelo de dados

erDiagram
    User ||--o{ Company : "possui"
    User ||--o{ RefreshToken : "tem"
    Company ||--o{ Client : "atende"
    Company ||--o{ Transaction : "registra"
    Company ||--o{ Document : "guarda"
    Company ||--o{ Task : "organiza"
    Company ||--o{ Ticket : "recebe"
    Company ||--o{ AuditLog : "audita"
    Company ||--o{ ApiKey : "emite"
    Client ||--o{ Transaction : "gera"
    Client ||--o{ Document : "tem"
    Client ||--o{ Task : "tem"
    Client ||--o{ Ticket : "abre"
    Client ||--o{ User : "acessa por"
    Ticket ||--o{ TicketMessage : "contém"
Loading

✅ Testes

O back-end tem testes automatizados que rodam contra um PostgreSQL de verdade (não um banco de mentira), porque o ponto mais importante do sistema é o isolamento entre empresas e isso só se prova com o banco real. O GitHub Actions roda tudo a cada push e pull request (.github/workflows/ci.yml), e também confere que o painel React compila.

O que está coberto

Área O que os testes garantem
Autenticação Cadastro e login, senha criptografada e nunca devolvida, mesma resposta para e-mail desconhecido e senha errada, renovação e encerramento de sessão, token ausente, vencido ou com assinatura errada
Acesso por perfil Gestor só entra na empresa dele; perfil CLIENT fica preso à própria empresa e não entra no CRM nem na auditoria
Isolamento entre empresas Uma empresa não lê, altera nem apaga clientes, lançamentos, chaves de API ou empresas de outra
API pública Exige chave, recusa chave inexistente ou revogada, devolve só clientes ativos e só os campos combinados
Regras de negócio Parcelamento, filtro por mês, paginação, resumo do painel, exclusão em cascata e trilha de auditoria

Como rodar

Use um banco só de testes (o nome precisa ter test; os testes apagam os dados e se recusam a rodar em outro banco):

cd backend
export DATABASE_URL="postgresql://usuario:senha@localhost:5432/businessflow_test"
npx prisma db push
npm test

🔭 Próximos passos

Pontos que eu melhoraria, olhando o código hoje:

  • Ampliar os testes para tarefas, chamados, documentos e importação OFX, e criar testes do front-end.
  • Migrações versionadas do Prisma no lugar do db push, para controlar as mudanças do banco com histórico.
  • Origens permitidas do CORS por variável de ambiente, em vez de listadas no código.
  • Uma só biblioteca de hash de senha (hoje há duas instaladas) e senhas de exemplo geradas, não fixas, no seed.

📸 Telas da Aplicação

🔐 Tela de Login

📊 Dashboard & KPIs

About

Plataforma SaaS Full Stack para gestão de pequenos negócios (CRM, Financeiro, Agenda). React + Node.js + PostgreSQL.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages