Case Study · Manufacturing

WorkCrest ERP

A mini ERP built for a small Indian manufacturing job shop that runs two businesses at once: making goods from its own material, and job work on material customers send in.

The problem

The shop was running on spreadsheets, paper, and memory. There was no single view of what stage a customer order was at, no reliable record of whose material was sitting in the shop at any given time, and purchases and payments went out without a consistent approval trail. GST invoices were prepared by hand, which meant regular mistakes in the CGST/SGST vs IGST split and missed HSN/SAC codes, and nobody had a real-time view of what was owed to suppliers, or what customers owed back, without reconciling a spreadsheet at month end.

Off-the-shelf ERPs don't model job work well: material that belongs to a customer, gets processed on the shop floor, and has to come back out again without ever being "sold" or valued as stock. That distinction has to be correct everywhere (inventory, GST treatment, invoicing) or the books don't reconcile.

What was built

One system of record spanning procurement, inventory, sales, and HR, built module by module, each one left demoable before moving to the next.

Configurable approval engine

One engine, not three bolted-on workflows. Purchase orders, payments, and inventory adjustments all route through the same amount-banded, role- or employee-based approval chain, surfaced in a single unified inbox.

Ownership-aware inventory

Every stock movement is an immutable ledger entry tagged Own or Customer-owned, per customer. Customer material can only be issued to that customer's jobs and never counts toward the shop's own reorder levels.

Procure-to-pay

Purchase orders, goods receipt, supplier bills, and payments, with payables ageing and a running per-supplier ledger, so "what do we owe, and since when" is always a live answer.

Order-to-cash, both ways

Quotation through customer order, delivery challan, and GST invoice, branching automatically between HSN-coded goods invoices and SAC-coded job-work service invoices, with the correct CGST/SGST vs IGST split computed and stored once.

Receivables & ageing

Receipts allocate against invoices immediately, with a true chronological statement per customer and the same ageing view (0–30/31–60/61–90/90+) used on the payables side.

Leave management

Leave types, auto-tracked balances, and manager approval, deliberately kept off the generic approval engine and resolved off the org chart instead, matching how the shop actually makes that call.

Getting job work right

The hardest part of this build wasn't any single screen. It was making the own-material/job-work distinction hold everywhere at once. Customer-supplied material is tracked by quantity only, never valued, and can't be issued outside that customer's own jobs. When goods finally leave the shop, the delivery challan type decides everything downstream: a goods dispatch becomes an HSN invoice, a job-work return becomes an SAC invoice, and the GST split is computed once, per line, and never silently recalculated later.

That level of domain correctness is exactly where off-the-shelf software falls over for a business like this, and exactly the kind of problem software is worth building for.

Under the hood

A modern, boring-on-purpose stack, chosen so the business logic gets the attention, not the tooling.

Next.js (App Router) TypeScript PostgreSQL Prisma NextAuth Tailwind CSS shadcn/ui Vitest Playwright

Need software built for how your business actually runs?

If off-the-shelf tools are forcing your business to work around them instead of for you, let's talk.