Sistema de gestão acadêmica com frontend em React e backend em Node.js/TypeScript.
Permite:
- Cadastrar e editar alunos
- Cadastrar e editar turmas
- Matricular alunos em turmas
- Registrar avaliações por meta
- Consolidar notificações por aluno em lotes diários
- Enviar email diário com todas as alterações de avaliação
- Frontend: React + TypeScript + Vite
- Backend: Node.js + TypeScript
- Persistência: Arquivos JSON em
server/data - Testes de aceitação: Cucumber em
features
meu-repositorio/
├── client/ # Aplicação web (React)
├── server/ # API e regras de negócio
├── sistema/ # Código compartilhado / domínio
├── features/ # Cenários Cucumber
├── ARQUITETURA.md # Documentação técnica
├── AGENTS.md # Configurações de agentes
└── README.md # Este arquivo
- Node.js 20+
- npm 10+
Na raiz do projeto, rode:
npm installTerminal 1 — Backend:
cd server
npm install
npm run devTerminal 2 — Frontend:
cd client
npm install
npm run devNavegador:
http://localhost:5173
Na raiz:
npm run buildOu por workspace:
cd server && npm run build
cd ../client && npm run buildNa raiz:
npm run testAs variáveis de exemplo estão em server/.env.example.
Crie server/.env com:
EMAIL_SENDER_MODE=smtp
SMTP_HOST=seu.hostname
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=seu-usuario
SMTP_PASS=sua-senha
SMTP_FROM=noreply@seudominio.com
ENABLE_EMAIL_SCHEDULER=true
EMAIL_DISPATCH_TIME=20:00Com EMAIL_SENDER_MODE=smtp, o backend falha ao iniciar se o SMTP estiver incompleto.
- Cada alteração de avaliação entra no lote diário do aluno
- Um email por dia — o aluno recebe apenas 1 email por dia
- Agrupamento por turmas — esse email inclui alterações de todas as turmas do dia
- Automático pelo scheduler diário
- Manual via API em
POST /emails/dispatch
GET /students— listar todosPOST /students— criar novoPUT /students/:id— atualizarDELETE /students/:id— remover
GET /classes— listar todasPOST /classes— criar novaPUT /classes/:id— atualizarDELETE /classes/:id— remover
POST /classes/:classGroupId/enrollments— matricular alunoDELETE /classes/:classGroupId/enrollments/:enrollmentId— desmatricular
GET /classes/:classGroupId/evaluations— listar por turmaPUT /classes/:classGroupId/students/:studentId/meta/:metaId— atualizar conceito
GET /emails/notifications— listar notificações pendentesPOST /emails/dispatch— disparar consolidação de emailsGET /health— verificar status da aplicação
- Configurar package.json com dependências iniciais
- Implementar modelo de domínio (entidades)
- Criar API REST básica
- Adicionar testes de aceitação com Cucumber
- Integrar email com Nodemailer
Projeto de TALP — Engenharia de Software
Última atualização: Abril de 2026