Re-engineer procurement.
Retire the Web Forms era.
Wonder Cement's procurement backbone — RFQ and reverse-auction events, comparative statements, and purchase orders — ran on aging ASP.NET Web Forms. Kansoft re-engineered it into a .NET 6 ASP.NET Core Web API with an Angular 14 SPA, on a domain-driven architecture and Microsoft Azure — without losing a single procurement workflow.
A procurement engine on aging Web Forms — modernize it without pausing a live auction or a purchase order.
Wonder Cement runs a large, high-volume procurement operation: RFQs and reverse auctions, comparative-statement evaluations, vendor negotiations, and purchase orders across a wide supplier base.
That operation ran on RFQCS — a procurement application built on the older EPS platform, using ASP.NET Web Forms with C# on MS SQL Server. Over time it had accumulated the constraints legacy Web Forms is known for: a dated, postback-driven UI, a tightly-coupled codebase where every enhancement was its own project, and limited headroom for real-time features and cloud-native operations.
The mandate: upgrade RFQCS to a modern .NET Core Web API with an Angular frontend — matching the existing workflows and conceptual design exactly — while preserving the intricate procurement logic the business runs on, and keeping the platform live throughout.
Five constraints the legacy platform imposed.
A dated stack, deeply coupled code, and business-critical workflows that could not be simplified away.
Aging ASP.NET Web Forms
A postback-driven UI and an older framework made the platform hard to evolve and increasingly out of step with how buyers and vendors expect to work.
Tightly-coupled codebase
Business logic, data access, and UI were interwoven. Every enhancement carried regression risk and shipped as its own project rather than a routine release.
Intricate procurement logic
Multi-round reverse auctions, comparative-statement workflows, N-level approvals, vendor ranking, and PR/PO quantity reconciliation — all had to be preserved to the rule.
Real-time & integration gaps
Live bidding, notifications, chat, currency conversion, and document handling needed modern messaging and storage the legacy stack didn't provide cleanly.
And a platform running live procurement the entire time.
RFQCS processes active auctions, approvals, and purchase orders every day. The re-engineering had to match existing workflows exactly, reuse the production database, and roll out incrementally — no big-bang cutover, no paused procurement.
A domain-driven rewrite — same workflows, modern foundation, shipped in modules.
Kansoft rebuilt RFQCS on .NET Core using domain-driven design, keeping the existing conceptual design and data model, and delivering module by module so the platform stayed usable throughout.
Workflow & Domain Assessment
Mapped every RFQ, auction, CS, and PR/PO workflow — including the logic embedded in SQL functions, triggers, and jobs — and the permission and status models behind them.
Domain-Driven Re-Architecture
Split the system into loosely-coupled layers — Core (entities, models, interfaces), Data Engine, Application (business logic), WebAPI, Queue, and Logging — so each evolves independently.
API + Angular Rebuild
Built the .NET 6 Core Web API and Angular 14 SPA module by module — buyers, PR, price bids, RFQ/CS, technical evaluation, PPO, reverse auction, and more — matching the legacy workflow.
Azure Foundation & Cutover
Wired in Azure AD auth, Service Bus messaging (via MassTransit), and Blob Storage; reused the existing MS SQL database; and rolled out incrementally with Serilog auditing throughout.
What we built — the platform, in six capability areas.
A faithful, modernized replacement for the legacy RFQCS: the full procure-to-order journey, live reverse auctions, multi-level comparative-statement approvals, and the messaging and audit backbone that ties it together — all on .NET 6, Angular, and Azure.
RFQ & Auction Event Management
Create and manage RFQ and auction events with templates, terms & conditions, technical parameters, and suggested-vendor lists — the front door to the whole procurement cycle.
Reverse Auction & Price Bidding
Live, multi-round reverse auctions with buyer and vendor price-bid handling, configurable auction settings, real-time vendor ranking, and recall logging.
Comparative Statement & Multi-Level Approval
CS generation and comparison with a dynamic, rules-driven approval workflow — extended cleanly to add Unit-Head CS approval as a later enhancement.
PR → PPO → PO Workflows
The full requisition-to-order chain with provisional and final purchase orders, and quantity reconciliation across PR, PPO, and PO handled in the domain layer.
Technical Evaluation & Vendor Management
Technical parameters and attachments, vendor deviations against terms, vendor ranking and rating — keeping technical and commercial evaluation in one flow.
Messaging, Chat & Audit
Azure Service Bus (via MassTransit) for asynchronous processing, event threads and collaboration/chat between stakeholders, and Serilog activity and error logging across the platform — plus a coal-transfer module added on the same foundation.
A modern .NET stack, chosen to match the team and the workload.
The upgrade keeps the organization on familiar Microsoft ground — C#, SQL Server, Azure — while replacing the aging Web Forms runtime with a clean, API-first, cloud-native foundation.
From a Web Forms monolith to a platform built to extend.
The re-engineering changed the foundation RFQCS runs on — the workflows stayed, the architecture became something the team can evolve.
| Aspect | Before | After |
|---|---|---|
| Framework | ASP.NET Web Forms (C#) | .NET 6 ASP.NET Core Web API |
| Frontend | Postback-driven Web Forms UI | Angular 14 single-page app |
| Architecture | Tightly-coupled monolith | Domain-driven, layered |
| Data access | Legacy data layer | Dapper ORM · existing SQL Server |
| Messaging | Limited / synchronous | Azure Service Bus via MassTransit |
| Auth & audit | Legacy login, ad-hoc logs | Azure AD · Serilog audit trail |
Beyond the rewrite — four ways the work compounds.
A modern foundation doesn't just look better. It changes how quickly procurement can adapt when the business needs it to.
Faster to extend
Loosely-coupled layers mean new capabilities ship as clean increments — Unit-Head CS approval and a coal-transfer module were added on the same architecture without re-platforming.
A modern buyer & vendor experience
The Angular SPA replaces dated postback screens with a responsive, real-time interface for auctions, bids, and approvals.
Cloud-native reliability
Azure Service Bus decouples processing, Blob Storage handles documents at scale, and Azure AD centralizes secure access — with Serilog giving a full audit trail.
Business logic preserved
The complex reverse-auction, comparative-statement, and PR/PO rules the business depends on were carried forward faithfully — modernization without disruption.
How the work was shaped.
The capability mix this engagement required.
Re-engineering a live procurement platform — matching every workflow while modernizing the stack — needs legacy-.NET depth, procurement-domain fluency, and Azure engineering, together.
Legacy .NET modernization ASP.NET Web Forms to .NET Core Web API, carrying forward business logic instead of rewriting it from scratch.
Procurement domain fluency RFQ, reverse auction, comparative statements, and PR/PO workflows modeled cleanly with domain-driven design.
Azure engineering Service Bus and MassTransit, Blob Storage, and Azure AD — integrated securely, with secrets kept out of the codebase.
Continuity discipline Reused the production SQL database and delivered module by module, so procurement never paused during the transition.
If a business-critical system is stuck on Web Forms, the re-platform is more achievable than it looks.
We modernize legacy .NET applications into cloud-native .NET Core + Angular platforms — preserving the workflows your operations depend on, reusing your existing data, and shipping in increments. If that's where you're headed, let's talk.