Sistema web para centralizar, consultar e navegar procedimentos operacionais e conhecimento técnico.
- Maintained: best-effort
- Stack: Next.js (Pages Router) + React 18 + MUI 5
O ES.Database organiza conhecimento operacional (procedimentos, guias e referências técnicas) em um único lugar, com UX focada em consulta rápida.
Em times de suporte/ops, procedimentos tendem a ficar espalhados (PDFs, wikis e chats). Isso aumenta MTTR e dificulta onboarding.
- Autenticação com NextAuth (Azure AD e/ou Google)
- Allowlist de e-mails por variável de ambiente (opcional)
- Listagens em múltiplos modos (cards / detalhado / compacto)
- Dark mode
- Node.js 18+ (recomendado 20 LTS)
- npm 9+
- Next.js 14
- React 18
- MUI 5
npm cicopy .env.example .env.local
npm run devAbra http://localhost:3001.
npm run build
npm run startTodas as variáveis estão documentadas em .env.example.
Principais:
NEXTAUTH_URL(ex.:http://localhost:3001)NEXTAUTH_SECRET(gere comopenssl rand -base64 32)AZURE_AD_CLIENT_ID,AZURE_AD_CLIENT_SECRET,AZURE_AD_TENANT_IDGOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRETALLOWED_EMAILS(CSV, opcional)
Documentação e diagrama textual: docs/ARCHITECTURE.md
Resumo:
[Browser]
|
v
[Next.js Pages Router]
|
+--> /login --------------> NextAuth (OAuth Providers)
|
+--> /components ---------> UI + ListViewWrapper
|
+--> /procedimentos/[id] -> ProcedurePages -> ProcedureDetails
npm run dev— desenvolvimentonpm run build— buildnpm run start— startnpm run lint— ESLintnpm run lint:fix— ESLint (fix)npm run format— Prettier (write)npm run format:check— Prettier (check)npm test— Jestnpm run test:ci— Jest (CI)
- Adicionar testes de UI mais específicos (RTL)
- Isolar camada de dados (fetch) em
lib/ - Evoluir mocks
data/para API real
Veja CONTRIBUTING.md.
MIT — veja LICENSE.md.
- Lista branca de e-mails para controle de acesso
- Gerenciamento de sessões com NextAuth.js
- Criptografia HTTPS e cabeçalhos seguros
- Busca global em tempo real por todos os procedimentos
- Navegação por categorias com menus expansíveis
- Filtros avançados por data, ordem alfabética e atualizações
- Design responsivo para acesso móvel e desktop
- 📱 Visualização em Cartões com thumbnails
- 📋 Visualização Detalhada com metadados completos
- 📄 Visualização Compacta para densidade máxima de informação
- 🎨 Modos Claro/Escuro conforme preferência do usuário
- 📹 Tutoriais incorporados do YouTube com player customizado
- 🖼️ Galerias de imagens com carregamento otimizado
- 💻 Blocos de código copiáveis com realce de sintaxe
- 📝 Parsing customizado de Markdown com elementos interativos
- Renderização no Servidor (SSR) com Next.js
- Geração Estática (SSG) para carregamento rápido
- Otimização e lazy loading de imagens
- Integração com CDN para distribuição global
Tecnologias Frontend
| Tecnologia | Versão | Propósito |
|---|---|---|
| Next.js | 14.1.4 | Framework React com SSR/SSG |
| React | 18.2.0 | Biblioteca para UI |
| Material-UI | 5.18.0 | Sistema de design e componentes |
| Framer Motion | 11.0.24 | Animações e transições |
| TypeScript | 5.4.4 | Tipagem estática e melhor DX |
Backend & Infraestrutura
| Tecnologia | Propósito |
|---|---|
| Next.js API Routes | Funções backend serverless |
| PostgreSQL | Banco de dados principal |
| NextAuth.js | Autenticação e gerenciamento de sessão |
| Vercel | Plataforma de deploy e hosting |
| Node.js | Ambiente de execução |
Desenvolvimento & Qualidade
| Ferramenta | Propósito |
|---|---|
| ESLint | Linting e padrões de código |
| Prettier | Formatação de código |
| Sass | Pré-processamento CSS avançado |
| Git | Controle de versão |
| GitHub Actions | Pipeline CI/CD |
graph TB
subgraph "Camada Cliente"
A[Navegador] --> B[Frontend Next.js]
end
subgraph "Camada Aplicação"
B --> C[Componentes React]
C --> D[Material-UI]
C --> E[Provedor de Tema]
C --> F[Mecanismo de Busca]
end
subgraph "Camada API"
B --> G[NextAuth.js]
B --> H[Rotas API]
G --> I[Provedores OAuth]
H --> J[Camada de Banco de Dados]
end
subgraph "Infraestrutura"
K[CDN Vercel] --> B
L[PostgreSQL] --> H
M[Armazenamento de Assets] --> B
end
style B fill:#e1f5fe
style G fill:#f3e5f5
style H fill:#e8f5e8
style L fill:#fff3e0
- 🏛️ Design Modular: Arquitetura baseada em componentes para facilidade de manutenção
- 🔄 Serverless First: Aproveitando a rede de borda da Vercel para escalabilidade
- 🛡️ Segurança por Design: Autenticação e autorização em todas as camadas
- 📱 Mobile First: Princípios responsivos aplicados em toda interface
- ⚡ Performance Otimizada: SSR, SSG e estratégias inteligentes de cache
# Softwares necessários
Node.js >= 18.x
npm >= 8.x
PostgreSQL >= 12.x (para funcionalidade completa)-
Clone o repositório
git clone https://github.com/ESousa97/ESdatabase.git cd ESdatabase -
Instale as dependências
npm install
-
Configure as variáveis de ambiente
cp .env.example .env.local # Edite .env.local com suas configurações -
Inicie o servidor de desenvolvimento
npm run dev
-
Acesse a aplicação
http://localhost:3001
Variáveis de Ambiente Obrigatórias
# Banco de dados
DATABASE_URL="postgresql://usuario:senha@localhost:5432/database"
# Autenticação
NEXTAUTH_URL="http://localhost:3001"
NEXTAUTH_SECRET="sua-chave-secreta"
# Provedores OAuth
AZURE_AD_CLIENT_ID="seu-client-id-azure"
AZURE_AD_CLIENT_SECRET="seu-client-secret-azure"
AZURE_AD_TENANT_ID="seu-tenant-id-azure"
GOOGLE_CLIENT_ID="seu-client-id-google"
GOOGLE_CLIENT_SECRET="seu-client-secret-google"ESdatabase/
├── 📂 componentes/ # Componentes React
│ ├── 📂 AppBar/ # Barra de navegação
│ ├── 📂 CardList/ # Componentes para visualização em cartões
│ ├── 📂 SearchBox/ # Funcionalidade de busca
│ ├── 📂 ThemeProvider/ # Gerenciamento de tema
│ └── 📂 Procedures/ # Exibição de procedimentos
├── 📂 pages/ # Páginas Next.js & rotas API
│ ├── 📂 api/ # Endpoints backend
│ ├── 📂 procedimentos/ # Páginas dinâmicas de procedimentos
│ └── 📄 *.js # Páginas estáticas
├── 📂 public/ # Assets estáticos
├── 📂 styles/ # Estilos globais e temas
├── 📂 data/ # Dados mock para demo
└── 📄 package.json # Dependências e scripts
// Login seguro com Microsoft/Google
import { signIn } from 'next-auth/react';
await signIn('azure-ad', {
callbackUrl: '/dashboard',
});// Busca em tempo real com debounce
const [results, setResults] = useState([]);
useEffect(() => {
const search = debounce(async (query) => {
const response = await fetch(`/api/search?q=${query}`);
setResults(await response.json());
}, 300);
search(searchTerm);
}, [searchTerm]);// Conteúdo rico com vídeos incorporados e blocos de código
const parseContent = (content) => {
return content
.replace(/@@(.+?)@@/g, '<code-block>$1</code-block>')
.replace(/youtube\.com\/watch\?v=([^&]+)/g, '<video-embed id="$1" />');
};-
Camada de Autenticação
- OAuth 2.0 com Azure AD & Google
- Autorização por whitelist de e-mails
- Gerenciamento de tokens JWT
-
Camada de Aplicação
- Sanitização de entradas com DOMPurify
- Cabeçalhos para proteção contra XSS
- Validação de token CSRF
-
Camada de Infraestrutura
- Aplicação obrigatória de HTTPS
- Configuração de cabeçalhos de segurança
- Implementação de rate limiting
- ✅ Arquitetura zero trust com autorização baseada em e-mail
- ✅ Cabeçalhos Content Security Policy (CSP)
- ✅ Gerenciamento seguro de sessão com NextAuth.js
- ✅ Proteção das variáveis de ambiente
- ✅ Prevenção contra SQL Injection via queries parametrizadas
- 🎯 10.000+ usuários ativos mensais
- ⚡ Tempo médio de carregamento < 2 segundos
- 📱 Compatibilidade móvel: 98%
- 🔍 Tempo médio de resposta de busca < 500ms
- ⏱️ Uptime de 99,9% no período ativo
- Nota no Lighthouse: 95+ em todos os critérios
- Core Web Vitals: Excelente avaliação
- Tamanho do bundle: Otimizado para carregamento rápido
- SEO: 100/100
# Desenvolvimento
npm run dev # Inicia servidor de desenvolvimento
npm run build # Build para produção
npm run start # Inicia servidor de produção
# Qualidade
npm run lint # Executa ESLint
npm run test # Executa testes (planejado)
npm run type-check # Validação TypeScript
# Manutenção
npm run install:clean # Instala dependências limpando cache- ESLint: Padrões rigorosos de código
- Prettier: Formatação consistente
- TypeScript: Segurança de tipos e melhor experiência dev
- Commits Convencionais: Mensagens padronizadas
- Siga o estilo e padrões de código existentes
- Documente novas funcionalidades
- Inclua testes unitários para novas funcionalidades
- Atualize o README se necessário
- Respeite a licença MIT do projeto
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE.md para detalhes.
- ✅ Uso comercial permitido
- ✅ Modificação permitida
- ✅ Distribuição permitida
- ✅ Uso privado permitido
⚠️ Obrigatoriedade de manter o aviso de licença e direitos autorais
📌 Status Atual: Projeto Demonstração/Portfólio
Este projeto foi originalmente implantado em produção atendendo mais de 10.000 usuários mensais, antes de ser convertido em demonstração em setembro de 2024. O código representa práticas corporativas de desenvolvimento e serve como exemplo abrangente de arquitetura moderna para aplicações web.
- 🎓 Valor Educacional: Demonstra práticas reais de desenvolvimento
- 💡 Inovação: Estimula contribuições e melhorias da comunidade
- 🏆 Portfólio: Demonstra habilidades técnicas e resolução de problemas
- 🤝 Comunidade: Retorno para a comunidade de desenvolvedores
- 📧 Email: sousa3086@outlook.com
- 💼 LinkedIn: Enoque Sousa
- 🐙 GitHub: @ESousa97
- 🐛 Reportar Bugs: Issues no GitHub
- 💡 Solicitar Funcionalidades: Discussões no GitHub
- ❓ Perguntas: Crie uma issue com label
question - 🤝 Colaborações: Contate por email para parcerias
- 🎓 Alura: Pelo conhecimento fundamental para este projeto
- ⚛️ Comunidade React/Next.js: Pela excelente documentação e suporte
- 🎨 Time Material-UI: Pelo sistema de design completo
- ☁️ Vercel: Pela plataforma de deploy excepcional
- 👥 Comunidade Open Source: Pela inspiração e troca de conhecimento
Este projeto não existiria sem o incrível ecossistema open source e os recursos educacionais que possibilitaram o aprendizado autodidata e crescimento profissional.
🌐 Ver Demo Online | 📖 Ler Documentação | 🛠️ Começar
Feito com ❤️ por Enoque Sousa
De uma ideia para resolver um problema simples, a um sistema em produção atendendo milhares de usuários, até uma contribuição open source para a comunidade.
✨ Criado em: 13 de mar. de 2024 às 21:11