Case StudyManufacturing ERP·2024·India

PRODEAZY

Configuration-Driven Enterprise Resource Planning

ClientManufacturing & Trading Business
TypeConfiguration-Driven ERP System
PRODEAZY
~2 days manual → real-time dashboard

Monthly Report

1–2 week dev sprint → under 5 minutes

Form Customization

Regular → eliminated

Stockout Incidents

25+ real-time metrics

Dashboard KPIs

The Problem

The client ran operations across spreadsheets and manual processes. Sales teams tracked enquiries in Excel with no conversion visibility. Purchase indents were emailed between departments with no approval tracking. Production planners couldn't see real-time inventory, causing over-ordering and stockouts. Quality control results were in notebooks, never feeding back into procurement decisions. Monthly reports required manually compiling data from five sources over two days.

What We Built

We built a metadata-driven ERP from scratch where the system adapts to the business at runtime. Field layouts, workflow routing, document templates, and validation rules are all stored in the database and editable by administrators through the UI — not by engineers through code. The FieldConfigManager, workflow routing engine, and database-stored print templates all express the same principle: defer decisions to runtime configuration so the software serves the business as it actually is.

// HOW IT WORKS

Under the Hood

01

Dynamic Field Configuration Engine

Every transaction form has fields described as metadata in the database. Administrators toggle visibility, required state, read-only mode, defaults, and validation rules via a UI panel. No code touched, no server restarted.

02

Multi-Step Workflow Engine

Post-QC routing is data-driven, not hardcoded. After a QC pass, the engine reads the source document, checks the post_qc_flow flag, and resolves the next destination. Adding a new routing rule means a database record, not a deployment.

03

Template-Driven Print Generation

Three-tier template resolution: database-stored custom template (checked first), file-based default template, then built-in fallback. Admins can paste new Handlebars HTML templates and preview immediately.

04

Generic Transaction Component

A single TransactionPage component handles any transaction type — fetching field config, rendering header and line-item grids dynamically, managing parent/child document relationships. Adding a new transaction type requires zero new form implementations.

In Action

Secure login screen with JWT authentication
Secure login screen with JWT authentication
Real-time dashboard with 25+ KPIs across all modules
Real-time dashboard with 25+ KPIs across all modules
Sales enquiry list with status pipeline and field configuration
Sales enquiry list with status pipeline and field configuration
Manufacturing analytics with LMTD trend comparisons
Manufacturing analytics with LMTD trend comparisons
Admin settings — business identity, print templates, and runtime configuration
Admin settings — business identity, print templates, and runtime configuration
// TECH STACK
FrontendReact 19 + Vite 7 + TypeScript
UITailwind CSS + shadcn/ui
RoutingReact Router v7
BackendExpress 4 (11 route modules)
DatabaseMySQL 8 (JSON functions for reporting)
TemplatingHandlebars (server-side print generation)
SecurityHelmet + Rate Limiting (2-tier)
AuthJWT with role-based middleware
DeploymentGoogle Cloud Run + Vercel
// WHAT IT DOES
  • +Sales pipeline: Enquiry → Quotation → Order → Packing → Dispatch → Return → Payment
  • +Purchase pipeline: Indent → Enquiry → Order → Receipt → QC → Return → Vendor Payment
  • +Production pipeline: Target → Planning → Requisition → Entry → QC
  • +Role-based access control with 7 personas (admin to quality inspector)
  • +Real-time reporting with MySQL JSON_OBJECT and JSON_ARRAYAGG aggregation
  • +LMTD comparisons and Top-N analysis computed in SQL
  • +Configurable validation rules with stored regex patterns and live test capability
  • +LookupSelect dropdowns showing pending quantities alongside item names
// THE HARD CALLS

Why We Did
What We Did

Every architectural decision has a reason. Here are the ones worth explaining.

01

Why MySQL over a document database?

The data is inherently relational — a Sales Order references a Quotation, which references an Enquiry, which references a Party. MySQL 8's JSON functions give document-style flexibility for the config layer without abandoning relational integrity for transactions.

02

Why configuration in the database rather than code?

The primary deployment target is a business where engineers are not on-call. When a process changes, the admin panel is the escape valve. Storing configuration in the database means the system evolves without a software release cycle.

03

Why Handlebars for print templates?

Server-side rendering for print documents is intentional. Handlebars templates are legible HTML that a technically literate admin can read and edit, stored as text in the database. React-PDF would require a build step and developer involvement for every template change.

// YOUR TURN

Something Like This
In Mind?

Tell us what you're building. We'll tell you how we'd do it.