MiniShop é um mini e-commerce full stack construido com React + TypeScript no front-end e Node + Express + TypeScript no back-end. O projeto foi realizado como forma de estudo de tecnologias.
- catalogo de produtos com categorias dinamicas
- area administrativa para criar, editar e remover produtos e categorias
- carrinho com persistencia local
- checkout com CEP, preenchimento automatico de endereco e cupom
- autenticacao com cadastro, login, logout e sessao no front
- perfil do usuario com historico de compras e edicao de dados
- API com Prisma, PostgreSQL e JWT
- React 18
- TypeScript
- Vite
- CSS customizado
- Vitest + Testing Library
- Node.js
- Express
- TypeScript
- Prisma
- PostgreSQL
- JSON Web Token
- Vitest + Supertest
Mini e-commerce/
client/
src/
components/
pages/
services/
styles/
types/
utils/
server/
prisma/
schema.prisma
seed.ts
src/
app.ts
server.ts
controllers/
services/
middlewares/
validations/
errors/
lib/
data/
types/
- home com destaque limitado de produtos
- pagina de catalogo completo
- pagina de categorias
- imagens reais na seed
- carrinho com resumo, controle de quantidade e persistencia local
- pagina dedicada de checkout
- busca de endereco por
CEP - frete calculado automaticamente apos endereco valido
- cupom de desconto
- pagina de sucesso apos confirmar pedido
- cadastro e login
- token JWT retornado pelo back
- sessao salva no front
- logout
- pagina de perfil
- edicao de nome e e-mail
- historico de compras do usuario autenticado
- criacao de categorias
- criacao, edicao e exclusao de produtos
- listagem administrativa separada da loja
O projeto usa Prisma + PostgreSQL.
Modelos atuais:
ProductCategoryUserOrderOrderItem
O schema principal esta em server/prisma/schema.prisma.
- Aplicacao online: mini-shop-client.vercel.app
- API online: minishop-api.onrender.com
- Health check: minishop-api.onrender.com/api/health
npm installFront-end:
cp client/.env.example client/.envBack-end:
cp server/.env.example server/.envNo front, VITE_API_BASE_URL pode ficar vazio no desenvolvimento local usando o proxy do Vite. Em deploy, defina a URL publica da API, por exemplo:
VITE_API_BASE_URL=https://seu-backend.onrender.comNo back, ajuste ao menos:
JWT_SECRET=sua-chave-segura
PORT=3333npm run prisma:generate --workspace servernpm run prisma:migrate --workspace server -- --name initnpm run prisma:seed --workspace servernpm run devAplicacoes locais:
- Front-end:
http://localhost:5173 - API:
http://localhost:3333
npm run dev: sobe front e back em paralelonpm run build: gera build do client e do servernpm run test: roda testes do client e do servernpm run dev:client: sobe apenas o frontnpm run dev:server: sobe apenas o back
npm run dev --workspace clientnpm run build --workspace clientnpm run test --workspace client
npm run dev --workspace servernpm run build --workspace servernpm run test --workspace servernpm run prisma:generate --workspace servernpm run prisma:migrate --workspace servernpm run prisma:seed --workspace servernpm run prisma:studio --workspace server
GET /api/health
POST /api/auth/signupPOST /api/auth/signin
GET /api/productsGET /api/products/:idPOST /api/productsPUT /api/products/:idDELETE /api/products/:id
GET /api/categoriesPOST /api/categories
GET /api/users/:userId/profilePUT /api/users/:userId/profileGET /api/users/:userId/ordersPOST /api/orders
Algumas dessas rotas exigem autenticacao via header:
Authorization: Bearer <token>O projeto possui testes no front e no back:
client: componentes, navegacao e fluxos principaisserver: endpoints, validacoes e autenticacao
Para rodar tudo:
npm run testPara rodar separadamente:
npm run test --workspace client
npm run test --workspace server- o token JWT usa
JWT_SECRETse estiver definido; caso contrario, usa um valor local de desenvolvimento - configure
DATABASE_URLpara seu PostgreSQL local ou hospedado - a seed pode ser reaplicada durante o desenvolvimento para repovoar produtos e categorias
- detalhar melhor o perfil do usuario
- salvar enderecos como entidade propria
- criar status mais completos para pedidos
- melhorar a experiencia mobile
- adicionar recuperacao de senha
GitHub: jefranca/MiniShop