Production-ready multi-tenant SaaS for jewellery shop owners to manage inventory, purchases, sales, customers, suppliers, reports, and QR-based Trade ID scanning.
jwellstack/
├── backend/
│ ├── src/main/java/com/jeweltrack/
│ │ ├── controller
│ │ ├── service
│ │ ├── repository
│ │ ├── entity
│ │ ├── dto
│ │ ├── config
│ │ ├── security
│ │ ├── utils
│ │ └── exception
│ ├── src/main/resources/
│ ├── Dockerfile
│ └── pom.xml
├── frontend/
│ ├── src/
│ │ ├── pages
│ │ ├── components
│ │ ├── services
│ │ ├── hooks
│ │ ├── context
│ │ └── layouts
│ ├── Dockerfile
│ └── package.json
├── docs/
│ ├── database-schema.sql
│ └── deployment-guide.md
├── postman/
│ └── JewelTrack.postman_collection.json
├── .env.example
└── docker-compose.yml
- Backend: Java 17, Spring Boot, Spring Security, JWT, JPA/Hibernate, Swagger
- Frontend: React + Vite + TailwindCSS + Axios + html5-qrcode
- Data: PostgreSQL (+ Redis service in compose)
- DevOps: Docker + Docker Compose
- Auth:
/api/auth/signup,/api/auth/login - Jewellery:
/api/jewellery,/api/jewellery/{tradeId} - Customers/Suppliers:
/api/customers,/api/suppliers - Purchases/Sales:
/api/purchases,/api/sales - Gold rates:
/api/gold-rates - Reports:
/api/reports/dashboard,/api/reports/sales,/api/reports/inventory
Swagger UI: http://localhost:8080/swagger-ui/index.html
All business tables include tenant_id. JWT embeds tenantId, and TenantContext applies tenant scoping in services/repositories.
- Backend generates QR PNG bytes per jewellery item using ZXing.
- Frontend scan page uses
html5-qrcodeto capture trade ID and callGET /api/jewellery/{tradeId}.
docker compose up --buildApp URLs:
- Frontend:
http://localhost:5173 - Backend API:
http://localhost:8080
See .env.example.
- Signup owner via API/postman.
- Create jewellery item with Trade ID
TRD-2026-000001. - Record sale on same trade ID to auto-update status to
SOLD.
Import postman/JewelTrack.postman_collection.json.
See docs/deployment-guide.md.