Sistema de gestão comercial para representação de madeiras: pedidos, romaneios, clientes e cálculos automáticos de M³.
- Calculadora bidirecional: informe quantidade → calcula M³, ou informe M³ → calcula quantidade
- Documentos: Pedido (para fábrica) e Romaneio (para cliente) com layout A4 para impressão/PDF
- Comissão automática: 5% deduzido do subtotal (configurável)
- Clientes completos: CNPJ, endereço, IE, telefone – tudo aparece no documento impresso
- Firebase Firestore: dados sincronizados na nuvem
- localStorage: fallback automático se Firebase não estiver configurado
- Deploy: pronto para Cloudflare Pages
npm install- Crie um projeto em console.firebase.google.com
- Adicione um app Web ao projeto
- Copie o objeto
firebaseConfig - Crie
.env.localna raiz:
VITE_FIREBASE_API_KEY=sua_chave
VITE_FIREBASE_AUTH_DOMAIN=seuprojeto.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=seuprojeto
VITE_FIREBASE_STORAGE_BUCKET=seuprojeto.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=123456789
VITE_FIREBASE_APP_ID=1:123:web:abc- No Firebase Console, ative o Firestore Database e configure as regras:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true; // mude para autenticação em produção
}
}
}
npm run devnpm run build- Suba o código no GitHub
- Conecte o repositório no Cloudflare Pages
- Build command:
npm run build - Output directory:
dist - Adicione as variáveis
VITE_FIREBASE_*nas configurações de ambiente - Aponte seu domínio para o projeto
src/
├── components/
│ ├── Layout.tsx # Sidebar + navegação
│ └── TimberCalculator.tsx # Tabela bidirecional de cálculo
├── lib/
│ ├── calc.ts # Lógica de cálculo M³
│ ├── firebase.ts # Serviço Firestore
│ ├── firebase.config.ts # Configuração Firebase
│ └── pdf.ts # Exportação PDF A4
├── pages/
│ ├── Dashboard.tsx
│ ├── Clientes.tsx
│ ├── DocumentManager.tsx # Pedido e Romaneio
│ ├── Relatorios.tsx # Lista com filtro por data
│ └── Configuracoes.tsx
├── store/
│ └── AppContext.tsx # Estado global + Firebase sync
└── types.ts