Aplicação Web para gerenciamento de alimentação, dieta e controle de calorias.
- Stack: Express (Node.js) + EJS + Axios
- UI: Bulma CSS (+ Dark Mode opcional)
- Porta: 4000
- API alvo:
http://localhost:3000(conformeswagger.yaml)
Este projeto foi desenvolvido como critério de avaliação do Portfólio de Projeto Pessoal da Mentoria em Testes de Software 2.0, Turma 2, do mentor Júlio de Lima.
- Node.js 18+
- API Nutrify rodando em
http://localhost:3000(conformeswagger.yaml)
npm install
npm startAcesse: http://localhost:4000
- Login/Logout
- Dashboard com progresso diário (kcal consumidas vs meta)
- Registro, listagem e remoção de refeições
- Listagem e CRUD de alimentos (create/update/delete apenas para admin)
- Tratamento de erros de respostas não 2xx da API
- Dark Mode com toggle e persistência em
localStorage
- Login (
/login): enviaPOST /users/loginpara a API, salva JWT em cookieauth_tokene carrega o perfil viaGET /users/profile. - Dashboard (
/dashboard): lista refeições (GET /meals), alimentos (GET /foods) e calcula progresso diário somando as calorias das refeições do dia corrente vscalorieGoaldo usuário. - Refeições:
- Criar:
POST /mealscomfoods: string[](IDs de alimentos) - Remover:
POST /meals/:id/delete
- Criar:
- Alimentos (
/foods):- Listar:
GET /foods - Criar:
POST /foods(admin) - Atualizar:
POST /foods/:id(admin) - Remover:
POST /foods/:id/delete(admin)
- Listar:
- Sem variáveis de ambiente adicionais. A base da API está embutida em
server.js(API_BASE_URL). - Porta fixa
4000.
- EJS para views com componentes parciais em
views/partials. - Bulma para responsividade e estilos; tabelas embrulhadas em
.table-containerpara scroll horizontal em telas menores. - Dark Mode via atributo
data-themenobodye CSS empublic/styles.css. - Tratamento de erros: mensagens amigáveis na UI quando a API retorna erro.
server.js
views/
partials/
header.ejs
footer.ejs
login.ejs
dashboard.ejs
foods.ejs
error.ejs
public/
styles.css
- Token JWT armazenado em cookie
HttpOnlycomSameSite=Lax. - Logout limpa o cookie.
Uso educacional/demonstrativo no contexto da mentoria.