Self-hosted web application for managing a 3D printing business: print queue, sales invoices, customers, products, filament inventory, and more.
- Print Queue — drag-and-drop queue with status tracking (Pending / Printing / Completed); bulk status actions; color swatch display
- Sales Invoices — full invoice lifecycle (Draft → Sent → Paid → Shipped); PDF generation; email delivery; line items with product picker; tax-exempt support; carrier + tracking numbers
- Customers — full CRUD with invoice history per customer
- Products — catalog with SKU, pricing, units sold, revenue tracking; per-color filament weight from slicer data
- Filament Inventory — track inventory by color and manufacturer; spool weight management; low/critical stock alerts; auto-deduct on queue completion
- Manufacturers — manage spool weights and low/critical thresholds per manufacturer
- Color Catalog — admin-managed print color list (pre-seeded with Bambu Lab PLA colors); colors assigned to line items and queue items
- PDF Invoice Upload — Ollama vision LLM extracts products from supplier PDF invoices → auto-populates queue
- Dashboard — revenue stats, queue summary, filament inventory overview, recent invoices
- Auth — JWT (HttpOnly cookie), CSRF protection, role-based access (admin / user), idle session timeout
- Admin — user management, color catalog, manufacturer management, audit logging
- Frontend: React + Vite + TypeScript + Tailwind CSS
- Backend: Node.js + Express + TypeScript (ESM)
- Database: PostgreSQL (22 migrations)
- AI: Ollama (
minicpm-v:8bvision model) - Deployment: Docker + Docker Compose + Nginx
wiz3dtools/
├── packages/
│ ├── backend/ # Express API server
│ ├── frontend/ # React SPA
│ └── shared/ # Shared TypeScript types
└── infrastructure/ # Docker and deployment configs
- Node.js >= 20.19.0
- PostgreSQL >= 14
- Ollama with
minicpm-v:8bmodel
git clone <repository-url>
cd wiz3dtools
npm install
cp .env.example .env # fill in DATABASE_*, JWT_SECRET, SMTP_*, COMPANY_*
npm run migrate
npm run devFrontend: http://localhost:5173 · Backend: http://localhost:3000
cp .env.example .env # fill in all values
npm run migrate
docker compose up -d --buildRegister the first admin user (gets admin role automatically):
curl -X POST http://localhost:3000/api/auth/register -H "Content-Type: application/json" -d '{"username":"admin","password":"yourpassword"}'git pull origin master
npm run migrate
docker compose up -d --buildCLAUDE.md— architecture reference and AI assistant instructionsCHANGES.md— full session-by-session change logSECURITY.md— security audit and controlsDEPLOYMENT.md— production deployment guideGETTING_STARTED.md— detailed local development guide
MIT