Sistema de gestão para salão com:
- Frontend: React + Vite
- Backend: Node.js + Express
- Banco local: SQLite (arquivo local)
- Node.js 18+
- npm 9+
- Docker (opcional)
npm install
npm --prefix backend installnpm run dev:apinpm run dev- Frontend:
http://localhost:5173 - API:
http://localhost:4000 - Health check:
http://localhost:4000/health
docker compose upURLs:
- Frontend:
http://localhost:5173 - API:
http://localhost:4000 - Health check:
http://localhost:4000/health
Parar containers:
docker compose downUse a pasta docs/screens/ para salvar as imagens com os nomes abaixo.
- Autenticação por e-mail e senha.
- Redirecionamento para troca de senha quando
mustChangePassword=true.
Imagem:
- Calendário mensal com seleção de dia.
- Listagem de agendamentos do dia selecionado.
- Criação, edição e remoção de agendamentos.
- Exportação de dados (CSV/PDF).
Imagem:
- Cadastro de serviços.
- Edição e inativação de serviços.
- Serviços ativos disponíveis para novos agendamentos.
Imagem:
- Listagem de usuários do sistema.
- Criação e edição de usuários (somente admin).
- Ativação/inativação de contas.
- Exclusão de contas (remove também os agendamentos do usuário).
- Reset de senha por admin.
Imagem:
- Edição de dados do perfil.
- Alteração de senha do usuário autenticado.
Imagem:
Este sistema não tem auto-cadastro público.
O primeiro admin deve ser criado via CLI.
npm run admin:createPara reset de senha de admin:
npm run admin:reset-password -- --email admin@salon.comDetalhes de flags (--force, --auto-password, --password, --name) no backend/README.md.
npm run dev: frontend em desenvolvimentonpm run dev:api: backend em watchnpm run start:api: backend sem watchnpm run build: build do frontendnpm run test:api: executa os testes do backendnpm run admin:create: cria admin via CLInpm run admin:reset-password -- --email ...: reset de senha de admin via CLI
- Arquivo padrão:
backend/data/app.db - O arquivo é criado automaticamente ao iniciar o backend, se não existir.
- Para resetar ambiente local:
- pare a API;
- remova
backend/data/app.db(e.db-wal/.db-shmse existirem); - inicie novamente.
- local: confirme que o backend está rodando (
npm run dev:api); - Docker: confirme
HOST=0.0.0.0nodocker-compose.yml; - veja logs:
docker compose logs -f api- causa comum: arquivo
backend/data/app.dbcriado comorootpor container; - o
docker-compose.ymljá roda comuser: "${UID:-1000}:${GID:-1000}"para evitar isso; - se já aconteceu, apague os arquivos de banco e suba novamente:
rm -f backend/data/app.db backend/data/app.db-shm backend/data/app.db-wal- confira
CORS_ORIGINno backend (deve incluirhttp://localhost:5173ehttp://127.0.0.1:5173); - confira se backend está acessível em
http://localhost:4000/health.
src/: frontendbackend/src/: APIbackend/tests/: testes da APIbackend/data/: banco SQLite local
Detalhes de endpoints, regras e contratos em backend/README.md.




