Sistema web completo, simples e responsivo para controle de produtos, estoque e vendas com múltiplos vendedores.
- Frontend: React + Vite + TypeScript + TailwindCSS
- Backend: Node.js + TypeScript + Express
- Banco: PostgreSQL
- ORM: Prisma
- Autenticação: JWT
- Upload de imagens: armazenamento local em
apps/api/uploads - Orquestração local: Docker Compose
apps/api: API REST, autenticação, regras de negócio, Prisma e seedapps/web: interface web responsiva para admin e vendedoresdocker-compose.yml: sobe PostgreSQL, API e frontend
- Login seguro com senha criptografada (bcrypt)
- Perfis e permissões (
ADMINeSELLER) - Cadastro/edição/exclusão de produtos (admin)
- Upload e exibição de foto do produto
- Controle de estoque com entradas, ajustes e histórico de movimentações
- Registro de vendas com baixa automática de estoque
- Bloqueio de venda de produto inativo
- Bloqueio de estoque negativo
- Proteção contra inconsistência em venda simultânea (transação +
updateManycondicional) - Dashboard com indicadores, ranking e últimas vendas
- Relatórios (vendas, estoque baixo, movimentações)
- Exportação CSV de vendas por período
- Interface responsiva (cards mobile e tabela desktop no histórico)
- Toast de sucesso/erro e confirmação antes de exclusões
Cria automaticamente:
- 1 admin:
admin / admin123 - 2 vendedores:
vendedor1 / vendedor123evendedor2 / vendedor123 - Produtos de exemplo com estoque inicial e movimentação
ENTRY
- Na raiz do projeto:
docker compose up --build- Acesse:
- Frontend: http://localhost:5173
- API: http://localhost:3333
- Healthcheck API: http://localhost:3333/health
- Node.js 20+
- PostgreSQL 16+
cp apps/api/.env.example apps/api/.envAjuste DATABASE_URL se necessário.
cp apps/web/.env.example apps/web/.envnpm installcd apps/api
npx prisma migrate dev --name init
npm run db:seedEm terminais separados:
npm run dev:api
npm run dev:webPOST /auth/loginGET /auth/meGET/POST/PUT/DELETE /users(admin)GET/POST/PUT/DELETE /productsGET/POST /salesPOST /stock/entry(admin)POST /stock/adjust(admin)GET /stock/movements(admin)GET /dashboardGET /reports/sales(?format=csv)GET /reports/stockGET /reports/movements
- Imagens de produtos ficam em
apps/api/uploads. - Para produção, altere
JWT_SECRET, CORS e credenciais do banco.