Sistema desenvolvido para aprimorar a gestão da Liga Acadêmica de Biomedicina Estética da UNISUL, proporcionando um ambiente digital centralizado para networking, organização de eventos, workshops e parcerias com marcas do setor. Até então, a instituição não dispunha de uma solução própria capaz de integrar o compartilhamento de materiais exclusivos, chamadas de pacientes-modelo e divulgação de parceiros estratégicos. O sistema disponibiliza painéis seguros e personalizados para professores, coordenadores, presidente da liga e ligantes, oferecendo controle eficiente sobre conteúdos, eventos e comunicação interna. Projetado para atender tanto ao público acadêmico quanto à comunidade externa, o projeto reforça o profissionalismo, a transparência e a excelência na gestão das atividades da liga.
Acesse a documentação Swagger em: https://www.labemunisul.com.br/swagger.html
A autenticação JWT utiliza cookies httpOnly para armazenar o token de sessão, aumentando a segurança contra ataques XSS. O backend faz uso do middleware cookie-parser para ler os cookies de autenticação nas requisições protegidas. O frontend foi adaptado para não manipular tokens diretamente, usando credentials: 'include' em todas as requisições autenticadas. Uso a lib dotenv para variáveis sensíveis, senhas criptografadas com bcrypt e CORS habilitado para integração frontend/backend.
O sistema não há sistema de cadastro, é uma equipe FIXA! Então gerei o acesso por um script temp, salvando a senha com hash por bcrypt.hash()
httpOnly para autenticação JWT e integração correta entre frontend e backend.
Painel Administrativo
Implementei API para Últimas Notícias para manutenção do sistema principal (GET updates é a única rota pública). Desenvolvi API para upload de PDFs via Multer, com preview de arquivos e atualizações em tempo real. Gerenciei mensagens do formulário de contato com endpoints GET e DELETE, aumentando os números de parceria com o projeto. Resumindo, administradores podem utilizar as rotas para criar, atualizar, e excluir dados gerais de todo o sistema.
Painel do Ligante
Acesso restrito aos membros da UNISUL. Organização de eventos com profissionais da área biomédica. Recepção de conteúdos enviados pelos coordenadores, professores e presidente.
No backend utilizei Node com Express, MongoDB Atlas e Mongoose para conexão e modelagem do banco de dados, JWT junto com cookie-parser para autenticação segura via cookies httpOnly, bcrypt para hash de senhas, Multer para upload de arquivos, CORS para requisições externas, dotenv para variáveis de ambiente, winston para logging estruturado, express-rate-limit para limitar requisições, Joi para validação de dados e ESModules (import/export). No frontend, utilizei HTML e CSS para a estrutura e estilo da interface, Bootstrap para responsividade e componentes visuais, JavaScript Vanilla para interatividade, e a API nativa do JS, Fetch, para consumir os dados da API de forma assíncrona.
O backend utiliza a biblioteca winston para logging estruturado. Todos os erros e eventos importantes são registrados tanto no console quanto em arquivos na pasta logs/ do projeto. Isso facilita o monitoramento, auditoria e manutenção do sistema.
Utilizo Joi para garantir a validação rigorosa dos dados enviados às rotas protegidas do backend. Os schemas asseguram que todos os campos obrigatórios estejam presentes e formatados corretamente, tanto para operações de criação quanto de edição (ex: encontros, atualizações, autenticação). A validação é implementada como middleware, impedindo que dados inválidos cheguem à lógica da aplicação. Além das validações tradicionais, aplico expressões regulares para bloquear caracteres potencialmente perigosos (como <, >, $, ", '), reforçando a proteção contra ataques de injeção e XSS. As mensagens de erro são claras e objetivas, facilitando a identificação de problemas durante o consumo da API.
Os testes unitários foram implementados com o Poku leve, rápido e brasileiro! 🇧🇷
Além disso, utilizei Thunder Client e HTTPie para testes manuais dos endpoints.
O aplicativo está sendo "traduzido" para TypeScript para futuras features, já que a equipe atual continuará na LABEM até 2026, e uma nova equipe fixa assumirá com novas regras de négocio e manunteções futuras.
.
├── frontend
├── backend
│ ├── server.js
│ ├── .env
│ ├── package.json
│ └── src
│ ├── app.js
│ ├── config
│ │ └── db.js
│ ├── controllers
│ │ ├── authAdmin.Controller.js
│ │ ├── auth.Controller.js
│ │ ├── contact.Controller.js
│ │ ├── encontros.Controller.js
│ │ ├── root.Controller.js
│ │ └── updates.Controller.js
│ ├── middleware
│ │ ├── authenticateJWT.js
│ │ ├── authorizeAdmin.js
│ │ ├── errorHandler.js
│ │ ├── notFoundHandler.js
│ │ ├── rateLimiter.js
│ │ └── validate.js
│ ├── models
│ │ ├── ContactMessage.js
│ │ ├── CreateEncontro.js
│ │ ├── Update.js
│ │ ├── User.js
│ │ └── UserAdmin.js
│ ├── routes
│ │ ├── auth.routes.js
│ │ ├── authAdmin.routes.js
│ │ ├── contact.routes.js
│ │ ├── encontros.routes.js
│ │ ├── root.routes.js
│ │ ├── swagger.routes.js
│ │ └── updates.routes.js
│ ├── utils
│ │ └── logger.js
│ ├── validators
│ │ ├── authValidator.js
│ │ ├── contactValidator.js
│ │ ├── encontroValidator.js
│ │ └── updateValidator.js
│ └── swagger.json
CLONE A BRANCH MAIN, a Branch com TyypeScript está em dev, adpate
cd backend
npm install
# Configure .env (MONGODB_URI, PORT=5555, JWT_SECRET, NODE_ENV=development)
node src/script.js *cadastro*
npm startO sistema está em produção, possui dominio e você terá que adpatar o CORS para localhost
- API rodando: http://localhost:5555
- Swagger docs: http://localhost:5555/swagger.html
- Usuários criados: [email protected] / 123456 | [email protected] / admin123
O frontend da aplicação foi publicado com a Vercel. O backend está publicado na
Render. A URL gerada permite que o front consuma a API normalmente.




