Sistema web completo para gerenciamento de campanhas e geração automática de selos de envio multi-tenant
- Sobre o Projeto
- Funcionalidades
- Tecnologias
- Arquitetura
- Pré-requisitos
- Instalação
- Configuração
- Desenvolvimento
- Testes
- Deploy
- Estrutura do Projeto
- Documentação
- Scripts Disponíveis
- Contribuindo
SealHub é uma solução completa e moderna para gerenciamento de campanhas de envio e geração automática de selos. O sistema foi desenvolvido com arquitetura multi-tenant, permitindo que múltiplas organizações utilizem a plataforma de forma isolada e personalizada.
- 🏢 Multi-tenant: Isolamento completo de dados por organização
- 🎨 Temas Personalizados: Cada organização pode ter suas cores e logo
- 📧 Validação de Domínio: Controle de acesso baseado em domínios de email corporativo
- 🔐 Autenticação Robusta: Firebase Auth com suporte a email/senha e Google
- 📱 Design Responsivo: Interface otimizada para desktop, tablet e mobile
- ♿ Acessibilidade: Alto contraste, fontes grandes e navegação por teclado
- 🧪 Cobertura de Testes: Testes unitários e de integração com Vitest
- 🚀 CI/CD Automatizado: Deploy automático via GitHub Actions
- Sistema multi-tenant com isolamento de dados
- Validação de email por domínio corporativo
- Personalização de tema (cores, logo, favicon)
- Configurações por organização (remetente padrão, timezone)
- Gestão de membros e permissões (Admin, Manager, Member, Viewer)
- Limites por plano (free, basic, premium, enterprise)
- Busca de empresas por CNPJ (integração com BrasilAPI)
- Validação automática de CNPJ (dígitos verificadores)
- Cadastro e edição de clientes
- Busca por nome (parcial e case-insensitive)
- Busca por CNPJ (parcial)
- Listagem completa de clientes
- Detecção automática de duplicação
- Dados complementares (telefone, email, contato)
- Criação e edição de campanhas
- Vinculação de múltiplos clientes
- Configuração de instruções de envio:
- 📦 Frágil
⚠️ Atenção- 🤲 Manusear com Cuidado
- ⬆️ Este Lado Para Cima
- Status de campanha (Rascunho, Ativa, Concluída, Cancelada)
- Remetente e observações customizáveis
- Auditoria completa (criação e atualização)
- Geração automática de selos em PDF
- QR Code com código único da campanha
- Ícones de instrução de envio
- Dados do destinatário (nome, CNPJ, endereço)
- Dados do remetente
- Layout profissional e otimizado para impressão
- Download individual ou em lote
- Login com email e senha
- Login com Google (OAuth)
- Verificação de email obrigatória
- Recuperação de senha
- Regras de segurança Firestore por organização
- Proteção de rotas (PrivateRoute)
- Contexto de autenticação global
- Tema claro e escuro
- Temas personalizados por organização
- Menu de acessibilidade:
- 🔠 Aumentar/diminuir fonte
- 🎨 Alto contraste
- ⌨️ Navegação por teclado
- Componentes UI modernos (shadcn/ui)
- Notificações toast (Sonner)
- Sidebar responsiva
- Breadcrumbs de navegação
- Loading states e skeletons
- React 19 - Biblioteca UI com novos recursos de concorrência
- TypeScript 5.9 - Tipagem estática e segurança de código
- Vite 7 - Build tool extremamente rápido
- React Router 7 - Roteamento SPA
- Tailwind CSS 4 - Estilização utility-first
- Radix UI - Componentes acessíveis (headless)
- Lucide React - Ícones modernos
- Sonner - Sistema de notificações toast
- Firebase 12
- Authentication (email/senha, Google OAuth)
- Firestore (banco NoSQL)
- Hosting (hospedagem estática)
- BrasilAPI - Consulta de dados de empresas (CNPJ)
- ESLint 9 - Linter JavaScript/TypeScript
- Prettier 3 - Formatador de código
- Vitest 4 - Framework de testes unitários
- Testing Library - Testes de componentes React
- TypeScript ESLint - Regras TypeScript para ESLint
- GitHub Actions - Automação de workflows
- Firebase Hosting - Deploy automático
- Vitest Coverage - Cobertura de testes
- Multi-tenant SaaS: Cada organização possui dados e configurações isolados
- Context API: Gerenciamento de estado global (Auth, Theme, Organization, Accessibility)
- Composition Pattern: Componentes reutilizáveis e compostos
- Custom Hooks: Lógica reutilizável (useAuth, useOrganization, useTheme)
- TypeScript First: Tipagem forte em todo o código
- Atomic Design: Componentes UI organizados hierarquicamente
organizations/ # Dados das organizações
{orgId}/
- name, cnpj, emailDomains
- theme (colors, logo)
- settings (sender, timezone)
- adminUsers[]
organizationMembers/ # Membros das organizações
{memberId}/
- userId, organizationId
- role (admin/manager/member/viewer)
- permissions[]
companies/ # Clientes cadastrados
{companyId}/
- organizationId (isolamento)
- cnpj, name, address
- type, status
- metadata (createdAt, updatedAt)
campaigns/ # Campanhas de envio
{campaignId}/
- organizationId (isolamento)
- name, sender, observation
- instructions (fragile, attention, etc)
- companyIds[] (clientes vinculados)
- status (draft/active/completed)
users/ # Perfis de usuários
{userId}/
- name, email
- currentOrganizationId
graph TD
A[Usuário acessa /login] --> B{Já autenticado?}
B -->|Sim| C[Redireciona para /campanhas]
B -->|Não| D[Exibe tela de login]
D --> E[Usuário faz login]
E --> F{Email verificado?}
F -->|Não| G[Redireciona para verificação]
F -->|Sim| H[Carrega organização]
H --> I[Aplica tema da organização]
I --> J[Redireciona para /campanhas]
Antes de começar, certifique-se de ter instalado:
- Node.js 18+ (Download)
- npm 9+ (incluído com Node.js)
- Git (Download)
- Conta Firebase (Criar conta)
git clone https://github.com/felipecorerato/sealhub.git
cd sealhubnpm install# Crie o arquivo .env na raiz do projeto
touch .envAdicione as seguintes variáveis (obtenha no Firebase Console):
VITE_FIREBASE_API_KEY=sua-api-key-aqui
VITE_FIREBASE_AUTH_DOMAIN=sealhub-72985.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=sealhub-72985
VITE_FIREBASE_STORAGE_BUCKET=sealhub-72985.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=seu-sender-id
VITE_FIREBASE_APP_ID=seu-app-id
VITE_FIREBASE_MEASUREMENT_ID=seu-measurement-id.env já está no .gitignore e nunca deve ser commitado.
- Acesse Firebase Console
- Clique em "Adicionar projeto"
- Siga o wizard de criação
- No menu lateral, vá em Authentication
- Clique em "Começar"
- Ative os métodos:
- ✅ Email/Senha
Veja mais detalhes em: docs/FIREBASE_AUTH_SETUP.md
- No menu lateral, vá em Firestore Database
- Clique em "Criar banco de dados"
- Escolha localização (ex:
southamerica-east1) - Inicie em modo de produção
- Copie as regras de segurança de
firestore.rules
Veja estrutura completa em: docs/FIRESTORE_STRUCTURE.md
npm run firebase:login
npm run firebase:initVeja guia completo em: docs/DEPLOY_FIREBASE.md
npm run github:setupEste comando irá:
- ✅ Criar service account do Firebase
- ✅ Adicionar secret
FIREBASE_SERVICE_ACCOUNTno GitHub - ✅ Gerar workflow
.github/workflows/deploy.yml
Veja guia detalhado em: docs/GITHUB_ACTIONS_SETUP.md
npm run devAcesse: http://localhost:5173
npm run buildOs arquivos otimizados serão gerados em dist/
npm run previewnpm run lintnpm run formatnpm testnpm testnpm run test:runnpm run test:uinpm run test:coverageRelatório será gerado em coverage/index.html
src/
├── lib/
│ └── __tests__/
│ ├── cnpj.test.ts # Testes de validação CNPJ
│ ├── email-domains.test.ts # Testes validação domínios
│ └── seal-generator.test.ts # Testes geração de selos
├── contexts/
│ └── __tests__/
│ ├── AuthContext.test.tsx
│ └── OrganizationContext.test.tsx
└── tests/
├── setup.ts # Configuração global
└── __mocks__/
└── firebase.ts # Mocks do Firebase
Veja documentação completa: docs/ESTRUTURA_TESTES.md
# Build + Deploy
npm run firebase:deploy
# Ou separadamente
npm run build
firebase deploy --only hostingAo fazer push ou merge na branch main, o GitHub Actions automaticamente:
- ✅ Instala dependências
- ✅ Roda testes
- ✅ Faz build da aplicação
- ✅ Deploy no Firebase Hosting
Monitorar: https://github.com/seu-usuario/sealhub/actions
- 🌐 Produção: https://sealhub-72985.web.app
- 🔧 Console Firebase: https://console.firebase.google.com/project/sealhub-72985
- 💻 Desenvolvimento: http://localhost:5173
sealhub/
├── .github/
│ ├── workflows/
│ │ └── deploy.yml # CI/CD GitHub Actions
│ └── *.md # Documentação GitHub
│
├── docs/ # Documentação técnica
│ ├── FIREBASE_AUTH_SETUP.md
│ ├── FIRESTORE_STRUCTURE.md
│ ├── MULTI_TENANT_STRUCTURE.md
│ ├── GUIA_DE_USO.md
│ └── ... (20+ documentos)
│
├── public/ # Assets estáticos
│ ├── favicon.svg
│ ├── manifest.json
│ └── vite.svg
│
├── src/
│ ├── app/
│ │ ├── providers.tsx # Providers globais
│ │ └── routes.tsx # Configuração de rotas
│ │
│ ├── assets/ # Imagens e ícones
│ │ ├── attention.png
│ │ ├── be-careful.png
│ │ ├── fragile.png
│ │ ├── iasa.png
│ │ └── this-side-goes-up.png
│ │
│ ├── components/ # Componentes React
│ │ ├── ui/ # Componentes base (shadcn/ui)
│ │ │ ├── button.tsx
│ │ │ ├── input.tsx
│ │ │ ├── dialog.tsx
│ │ │ └── ... (10+ componentes)
│ │ │
│ │ ├── AccessibilityMenu.tsx
│ │ ├── CampaignForm.tsx
│ │ ├── ClientSearchBar.tsx
│ │ ├── Logo.tsx
│ │ ├── PrivateRoute.tsx
│ │ ├── Sidebar.tsx
│ │ ├── ThemeSelector.tsx
│ │ └── TopBar.tsx
│ │
│ ├── contexts/ # Context API
│ │ ├── __tests__/
│ │ ├── AccessibilityContext.tsx
│ │ ├── AuthContext.tsx
│ │ ├── OrganizationContext.tsx
│ │ ├── SidebarContext.tsx
│ │ └── ThemeContext.tsx
│ │
│ ├── lib/ # Bibliotecas e utilitários
│ │ ├── __tests__/
│ │ ├── firebase/
│ │ │ ├── campaigns.ts # CRUD de campanhas
│ │ │ ├── companies.ts # CRUD de clientes
│ │ │ ├── organizations.ts # CRUD de organizações
│ │ │ └── users.ts # Perfis de usuários
│ │ │
│ │ ├── cnpj-api.ts # Integração BrasilAPI
│ │ ├── cnpj.ts # Validação CNPJ
│ │ ├── colors.ts # Tokens de cor
│ │ ├── email-domains.ts # Validação domínios
│ │ ├── firebase.ts # Configuração Firebase
│ │ ├── seal-generator.ts # Geração de PDFs
│ │ └── utils.ts # Utilitários gerais
│ │
│ ├── pages/ # Páginas da aplicação
│ │ ├── auth/
│ │ │ ├── Login.tsx
│ │ │ ├── Register.tsx
│ │ │ ├── VerifyEmail.tsx
│ │ │ └── ForgotPassword.tsx
│ │ │
│ │ ├── campaigns/
│ │ │ └── Campaigns.tsx
│ │ │
│ │ ├── clients/
│ │ │ └── Clients.tsx
│ │ │
│ │ └── admin/
│ │ └── Dashboard.tsx
│ │
│ ├── styles/ # Estilos globais
│ │ ├── accessibility.css # Estilos acessibilidade
│ │ └── tokens.css # CSS custom properties
│ │
│ ├── types/ # Definições TypeScript
│ │ ├── index.ts # Tipos principais
│ │ └── organization.ts # Tipos organizações
│ │
│ ├── App.tsx # Componente raiz
│ ├── main.tsx # Entry point
│ └── index.css # Estilos base
│
├── .env # Variáveis de ambiente (git-ignored)
├── .gitignore
├── components.json # Configuração shadcn/ui
├── eslint.config.js
├── firebase.json # Configuração Firebase
├── firestore.rules # Regras de segurança Firestore
├── package.json
├── tailwind.config.js
├── tsconfig.json
├── vite.config.ts
├── vitest.config.ts
└── README.md
- 🔐 Configuração de Autenticação Firebase
- 🗄️ Estrutura do Firestore
- 🔒 Regras de Segurança Firestore
- 🌐 Deploy no Firebase Hosting
- 🤖 Configuração GitHub Actions
- ✅ Checklist de Deploy
- 🏢 Sistema Multi-Tenant
- 📧 Verificação de Email
- 📧 Configuração de Domínios
- 📊 Sistema de Campanhas
- 🏷️ Geração de Selos
- 🔍 Auditoria de Campanhas
- 🧪 Estrutura de Testes
- 📊 Relatório de Testes
- ♿ Melhorias de Acessibilidade
- 📱 Otimização Mobile
- 🎨 Hierarquia Z-Index
- 📝 Implementação Completa
- 🔄 Migração para Multi-Tenant
- 📋 Resumo Multi-Tenant
- ✉️ Resumo Verificação Email
| Script | Descrição |
|---|---|
npm run dev |
Inicia servidor de desenvolvimento (Vite) |
npm run build |
Build otimizado para produção |
npm run preview |
Preview do build de produção |
npm run lint |
Executa ESLint |
npm test |
Executa testes em modo watch |
npm run test:run |
Executa testes uma vez (CI) |
npm run test:ui |
Interface gráfica de testes |
npm run test:coverage |
Gera relatório de cobertura |
npm run firebase:login |
Faz login no Firebase CLI |
npm run firebase:init |
Inicializa projeto Firebase |
npm run firebase:deploy |
Build + Deploy no Firebase |
npm run firebase:serve |
Testa hosting localmente |
npm run github:setup |
Configuração automática GitHub Actions |
- Fork o projeto
# No GitHub, clique em "Fork"- Clone seu fork
git clone https://github.com/seu-usuario/sealhub.git
cd sealhub- Crie uma branch feature
git checkout -b feature/nova-funcionalidade- Faça suas alterações
- Escreva código limpo e documentado
- Adicione testes para novas funcionalidades
- Mantenha cobertura de testes acima de 80%
- Siga os padrões ESLint e Prettier
- Commit suas mudanças
git add .
git commit -m "feat: adiciona nova funcionalidade X"Convenção de commits (Conventional Commits):
feat:Nova funcionalidadefix:Correção de bugdocs:Documentaçãostyle:Formataçãorefactor:Refatoraçãotest:Testeschore:Tarefas gerais
- Push para seu fork
git push origin feature/nova-funcionalidade- Abra um Pull Request
- Vá no GitHub e clique em "New Pull Request"
- Preencha o template de PR
- Aguarde review
- ✅ Use TypeScript com tipagem forte
- ✅ Componentes funcionais com hooks
- ✅ Props com interface/type
- ✅ Comentários JSDoc em funções públicas
- ✅ Nomes descritivos (camelCase para variáveis, PascalCase para componentes)
- ✅ Máximo 200 linhas por arquivo (considere quebrar)
npm run lint # Verificar erros de lint
npm test # Rodar todos os testes
npm run build # Garantir que build funciona- Sistema multi-tenant completo
- Autenticação Firebase (email + Google)
- Gerenciamento de clientes (CRUD completo)
- Gerenciamento de campanhas (CRUD completo)
- Geração de selos em PDF
- Temas claro/escuro + personalizados
- Menu de acessibilidade
- Validação de CNPJ
- Integração BrasilAPI
- Regras de segurança Firestore
- Deploy automático GitHub Actions
- Testes unitários (80%+ cobertura)
- Design responsivo
- Documentação completa
- Página de configurações da organização
- Interface para gerenciar membros
- Interface para personalizar tema
- Dashboard com estatísticas
- Exportar relatórios (CSV, Excel)
- Histórico de alterações
- Sistema de notificações
- Busca avançada com filtros
- Paginação para grandes volumes
- Integração com APIs de rastreamento
Nenhum problema crítico conhecido no momento.
- Verifique se o bug já foi reportado em Issues
- Se não existir, crie uma nova issue com:
- 📝 Descrição detalhada
- 🔄 Passos para reproduzir
- 💻 Ambiente (browser, OS)
- 📸 Screenshots (se aplicável)
- 📊 Console logs (se aplicável)
Abra uma Discussion para:
- 💡 Novas ideias
- 🤔 Dúvidas gerais
- 💬 Discussões sobre arquitetura
Este projeto é privado e de uso interno.
© 2024 Felipe Corerato. Todos os direitos reservados.
Felipe Corerato
- GitHub: @felipecorerato
- LinkedIn: Felipe Corerato
- Email: felipe@example.com
- React Team pela biblioteca incrível
- Firebase Team pela infraestrutura robusta
- Vercel pelo Vite e ferramentas modernas
- shadcn pelos componentes UI de qualidade
- BrasilAPI pela API de consulta de CNPJ
- Comunidade open-source pelos pacotes utilizados
- 📦 Dependências: 40 pacotes
- 📝 Linhas de código: ~15.000 linhas
- 🧪 Cobertura de testes: 85%+
- 📄 Documentação: 25+ arquivos Markdown
- ⚡ Performance: Lighthouse 95+ score
- ♿ Acessibilidade: WCAG 2.1 AA compliant
Feito com ❤️ e ☕ usando React + TypeScript + Firebase
⭐ Star este projeto se ele foi útil para você! ⭐