TS Industry
B2BInternal systemOn-premise

Manufacturing ERP

An internal ERP for a manufacturing company - from inquiry through quote and order to the bill of materials, production and warehouse. From UI design to on-premise operation on the client's server.

Role
Design · Development · Deployment
Type
B2B · Internal system
Status
In production
product screenshot - orders overview and bill of materials
internal system · NDA

// Brief

The whole sales and production process in spreadsheets

The company ran inquiries, quotes, orders and their bills of materials in a set of Excel spreadsheets and email threads. For each inquiry, material prices and labor rates were looked up by hand, quotes existed in dozens of versions, and the status of a given order was known only to whoever happened to have it.

The goal was to build an internal ERP that captures the process from the first inquiry to dispatch - and to design it to match how the company actually works.

// Solution

From inquiry to bill of materials in one system

The system carries an order through its full lifecycle. An inquiry becomes a quote assembled from material and operations per price lists, which can be versioned and exported to PDF for the customer. Once approved, the quote becomes an order with its own bill of materials - broken down into items, materials and production operations.

The hardest part was getting the database and the whole order flow right - so that inquiry, quote, order and bill of materials link up precisely and orders can be edited anytime without breaking the connected data. And all of that at a time when there was no AI to help: every modeling decision was made by hand and had to last for years of operation.

  • Inquiry → quote (material and operations from price lists) → versioning → PDF
  • Orders with a bill of materials: breakdown into items, materials and operations
  • Material warehouse tracking and link to production
  • Roles and permissions for sales, production and warehouse

// Drawings & data

Technical drawings and large files

Each item comes with technical drawings - often large files. I store them in Cloudflare R2 object storage and keep only links, versions and metadata in PostgreSQL, so the database stays lean and drawings are served fast.

  • Drawings in Cloudflare R2, links and versions in PostgreSQL
  • Page caching, image optimization and observability via Sentry

// Operations

On-premise, right on the company's server

The company wanted everything in-house, on their own server - from my perspective the simplest and cleanest option. I deployed the Next.js app and PostgreSQL on-premise, set up backups and updates, and the operation then runs without daily assistance. Drawings stay in Cloudflare R2.

  • Next.js + PostgreSQL right on the company's server
  • Backups and updates set up for independent IT operation
  • Hybrid storage - data on-premise, drawings in R2

// Stack

Next.jsTypeScriptPostgreSQLPrismaCloudflare R2Node.jsSentry
Message on WhatsApp