Sistema full stack de catálogo corporativo para empresas que vendem por cotação.
O cliente acessa o catálogo, pesquisa produtos por categoria, marca ou SKU, adiciona itens à cotação e envia a solicitação. A equipe comercial acompanha os pedidos em um painel administrativo protegido, visualiza os detalhes e atualiza o status de atendimento.
| URL | |
|---|---|
| Site | https://catalogpro-b2b.vercel.app/ |
| Painel admin | https://catalogpro-b2b.vercel.app/admin |
| API | https://catalogpro-b2b-api.onrender.com/api/health |
| Senha demo | catalogpro-demo |
A API está no Render (plano gratuito). O primeiro acesso pode levar até 30 segundos para o servidor inicializar.
- Catálogo com produtos reais vindos da API
- Busca por nome, SKU, categoria e marca
- Filtros combinados por categoria e marca
- Modal de detalhes com especificações técnicas
- Drawer de cotação com controle de itens e quantidades
- Formulário de orçamento com validação
- Cache inteligente (sessionStorage, TTL 5 min) com stale-while-revalidate
- Skeleton cards durante o carregamento
- Estado de erro com retry automático
- Feedback visual ao adicionar produto à cotação
- Layout responsivo (desktop, tablet, mobile)
- Tela de login protegida por cookie httpOnly
- Dashboard com métricas de cotações por status
- Listagem de solicitações recebidas
- Visualização completa de cada cotação (dados do cliente + produtos)
- Atualização de status (Nova → Em análise → Respondida → Fechada)
- Logout seguro com invalidação de sessão
Frontend
- React 19 + Vite
- CSS puro com custom properties (zero framework)
- Deploy: Vercel
Backend
- Node.js + Express
- Prisma ORM + PostgreSQL
- Deploy: Render
- Rotas admin protegidas por middleware de sessão
- Cookie
httpOnly+sameSite: none+secureem produção - CORS restrito a origens autorizadas
- Rate limit de cotações (5 por minuto por IP)
- Validação de payload no backend (tamanho, formato, campos obrigatórios)
- Nenhum segredo em arquivo versionado
Usuário
│
▼
Frontend React/Vite — Vercel
│ sessionStorage cache (5 min TTL)
│ stale-while-revalidate
▼
API REST Node/Express — Render
│ rate limit · validação · auth middleware
▼
Prisma ORM
│
▼
PostgreSQL — Render
CatalogPro B2B/
├── catalogpro-b2b/ Frontend React/Vite
│ ├── src/
│ │ ├── admin/ Painel administrativo
│ │ ├── components/ Componentes públicos
│ │ ├── data/ Fallback local
│ │ └── services/ Integração com API
│ └── dist/ Build de produção
├── backend/ API Node/Express/Prisma
│ └── src/
│ ├── controllers/
│ ├── middleware/
│ └── routes/
└── docs/
└── screenshots/
GET /api/health
GET /api/products
GET /api/categories
GET /api/brands
GET /api/quotes [auth]
GET /api/quotes/:id [auth]
POST /api/quotes
PATCH /api/quotes/:id/status [auth]
POST /api/auth/login
POST /api/auth/logout
GET /api/auth/check
- Node.js 18+
- PostgreSQL
- Git
git clone https://github.com/RhanielRodri/catalogpro-b2b.git
cd "CatalogPro B2B"cd catalogpro-b2b
npm install
npm run dev.env do frontend:
VITE_API_URL=http://localhost:3333/apicd backend
npm install.env do backend:
DATABASE_URL="postgresql://usuario:senha@localhost:5432/catalogpro"
FRONTEND_URL="http://localhost:5173"
ADMIN_SECRET="sua_senha_admin"
PORT=3333
NODE_ENV=developmentnpm run prisma:deploy # roda as migrations
npm run prisma:seed # popula dados de demonstração
npm run dev # inicia a API# Frontend
cd catalogpro-b2b && npm run build
# Backend
cd backend && npm run build| Serviço | Plataforma |
|---|---|
| Frontend | Vercel |
| API | Render |
| Banco | PostgreSQL no Render |
Variáveis necessárias no Vercel:
VITE_API_URL=https://catalogpro-b2b-api.onrender.com/api
Variáveis necessárias no Render:
DATABASE_URL
FRONTEND_URL
ADMIN_SECRET
NODE_ENV=production
PORT=3333
- Aplicação full stack com frontend, backend e banco separados e em produção
- Cache inteligente no cliente para performance em APIs com cold start
- Autenticação cross-origin com cookie httpOnly seguro
- Painel administrativo com controle de acesso real
- Validação e rate limiting no backend
- Responsividade em múltiplos breakpoints
- Fluxo B2B real: catálogo → cotação → análise comercial
Desenvolvido por Rhaniel Rodrigues.
GitHub: https://github.com/RhanielRodri








