Next Web Business
Invoicing, inventory and GST workflows for one production customer account with 50+ active sub-users.
- React
- Express
- MongoDB
- ASP.NET Core
- QuestPDF
Business workflows with real constraints
Started in November 2025 as Billdesk, Next Web Business brings inventory, invoices, recurring billing and accounting registers into one application. Concurrent billing, tax calculations and document generation each introduce a different consistency problem.
My contribution
I co-architected and implemented voucher, inventory, contact and financial-register modules. I independently built and deployed the document service, including its authentication, request contract, template selection and integration with the ERP.
The document request crosses two runtimes
The browser requests a PDF from ASP.NET Core. That service forwards authentication and tenancy context to Express to fetch hydrated document data. QuestPDF renders the selected template and returns PDF bytes to the browser. Documents are rendered on request rather than served from a PDF cache.
- Browser requests document
- ASP.NET Core forwards context
- Express reads tenant-scoped MongoDB data
- QuestPDF renders selected template
- Browser receives PDF
Interactive 3D Distributed Systems Graph
Live 3D topology visualizing service boundaries, isolation contracts, and asynchronous document rendering pipelines.
Web Client
Next.js 16 · React 19HTTPS / WSS · 120fps GSAPApp Router RSC with client-side interactive leaves and zero-latency audio synthesis.
Keeping stock and financial totals consistent
FIFO stock consumption, voucher updates and inventory ledger entries run in MongoDB transactions. Conditional quantity checks protect stock adjustments when multiple users bill concurrently.
React gives immediate feedback with a 120 ms debounce on numeric input; Express recalculates totals before saving. Both sides apply the same GST rules: intra-state CGST/SGST splits and inter-state IGST, with HSN/SAC summaries. The server remains authoritative.
static getTaxType(sellerStateCode, placeOfSupplyStateCode) { if (!sellerStateCode || !placeOfSupplyStateCode) return "CGST_SGST"; return sellerStateCode === placeOfSupplyStateCode ? "CGST_SGST" : "IGST";}Production use, with a clear boundary
One production customer account uses the application with 50+ active sub-users. GST reconciliation remains manual: accountants compare registers with portal reports. This is not an automated government-portal integration. Customer records, live endpoints and private source repositories are not exposed.