Multi-branch jewellery retail ERP
O2D
A multi-branch ERP that merges a second factory ERP into one backend, runs a 13+ stage order pipeline and syncs with a B2B platform.
- API endpoints
- 170API endpoints
- data models
- 29data models
- pipeline stages
- 13+pipeline stages
Overview
Built a full-stack production ERP that serves multiple retail branches through a 13+ stage order-to-dispatch pipeline. A second, independently built factory ERP was merged under the same backend, with its legacy table names preserved through Prisma @map/@@map so no API contract changed, and a third external B2B platform is integrated server-to-server. After launch the system was retrofitted from single-tenant to multi-branch, with documented cross-system data-isolation rules so the merged products safely share one PostgreSQL database. Built by a 2 to 3 person team over roughly 250 commits in 3 months.
What I built
- 170 API endpoints, 29 Prisma models and 38 migrations on the backend
- 27 feature modules and 31 routes across roughly 173 frontend files
- 139-file legacy React app fully migrated to the new typed frontend
- Multi-branch retrofit after launch: branch-scoped RBAC, a SUPER_ADMIN role and 3 configurable workflow variants
- Secret-authenticated server-to-server integration with an external B2B platform
- Immutable audit log powering a state-reconstruction recovery tool
- SSRF-hardened image proxy with TOCTOU-safe RBAC checks
- Docker, Nginx and Let's Encrypt on two live domains, with GitHub Actions CI/CD to EC2