ERP System — Purchase, Sales, Projects, Service & Accounting
Every module posts into one accounting engine.

The problem
The client ran purchase, sales, projects and service as separate spreadsheets, then rebuilt financial statements by hand at month end. The brief was one system where operational work becomes accounting automatically — with statements that an accountant would actually sign off on.
An end-to-end ERP where purchase, sales, project, and service modules feed a connected accounting engine that produces an accurate income statement and balance sheet.
What I built
Double-entry accounting engine
A chart of accounts, journals and ledgers where every operational document generates its own balanced entries — no manual posting.
Purchase & inventory
Purchase orders, goods receipt, supplier bills, tax and discount handling, multi-warehouse stock and valuation feeding cost of goods sold.
Sales & receivables
Quotations, invoices, payments and credit notes with automatic revenue and receivable postings.
Project & service billing
Project cost tracking and service jobs that roll into revenue recognition instead of sitting outside the books.
Financial reporting
Trial balance, income statement and balance sheet generated live from the ledger, with drill-down to the source document.
Roles & permissions
Separate workflows for admins, accountants and operators, so approvals and postings stay in the right hands.
Hard parts
- 01
I was not an accounting student
I had to learn double-entry bookkeeping properly — chart of accounts, accruals, ledger structure, how the balance sheet ties to the income statement — before I could model it. I checked my mapping against real accountants until the statements balanced for every scenario.
- 02
Keeping modules from drifting
Five modules writing to one ledger means one wrong entry corrupts the statements. I centralised posting rules so modules describe an event and the accounting layer decides the entries.
- 03
Reports that got slow
Statement queries scanned years of journal lines. Query rewriting, indexing and caching on the reporting endpoints cut backend response times by roughly 70%.
My contribution
- Designed the accounting backbone so every purchase, sale, project cost, and service entry posts correct double-entry journals automatically.
- Learned accounting from the ground up — chart of accounts, ledgers, trial balance — to model income statement and balance sheet correctly.
- Built the purchase and sales modules with tax, discount, and multi-warehouse inventory tied into stock valuation.
- Implemented project and service billing that flows into revenue recognition and receivables.
- Built role-based workflows and permissions for admins, accountants, and operators across every module.
- Optimized backend performance ~70% via query tuning, indexing, and caching on heavy reporting endpoints.
Outcome
- Month-end statements generated from the system instead of assembled by hand.
- ~70% faster backend on heavy reporting endpoints.
- One source of truth across purchase, sales, projects and service.
- React
- NestJS
- Express.js
- MySQL


