Context
WSC Software was built as a reusable SaaS product for companies in the order management and distribution space. The premise was clear from the start: not to build a custom system for a specific client, but to design a platform generic and configurable enough to be deployed across multiple clients without touching the core between deployments. From the very beginning of the product, integration with ERPs like Tango Software was a central design decision, not a secondary feature: the target clients were already operating on these systems, and WSC had to fit naturally into that workflow without imposing an operational disruption.
The Challenge
The real technical challenge was not building the features themselves, but designing an architecture where each client could have their own plan, their own enabled modules, their own ERP integration and their own business rules — without that variability turning into technical debt. Each client operates with their own isolated instance, with configurable ERP synchronization times according to their own provider’s availability windows, and with offline capabilities enabled or disabled according to their operational needs. The system has to work in areas with degraded connectivity, adapt to different order approval flows and expose only the modules in the contracted plan — all without branching the codebase.
The Solution
The platform was designed and developed from scratch with the following pillars:
Modular and reusable architecture — each client has their own independent plan configuration. Available modules, per-role permissions and active integrations are derived from that configuration without modifying the core system.
Complete roles and permissions system — authentication and authorization with ASP.NET Identity, with fully configurable roles and permissions per client. The admin panel includes complete entity traceability, log visualization and resource usage metrics for the support team.
Real-time notifications via SignalR — users receive instant updates on order modifications, price changes, stock variations and data updates from external ERP services. Alerts are also emitted when an external service becomes unavailable, allowing the team to react before the problem impacts operations.
Configurable synchronization with Hangfire — each client defines their own synchronization intervals with their ERP. This responds to a concrete reality: different ERP providers have different availability windows and load limits, and forcing a single global schedule created operational conflicts.
Offline operation with IndexedDB and PWA — prices, stock and critical data are stored locally in IndexedDB. Orders can be saved as drafts in the browser and submitted when the connection is restored. This capability is configurable per client: some operate in warehouses or areas with degraded connectivity where offline is a real requirement, not just a nice-to-have.
Multi-format export — data can be exported to CSV, PDF and plain text according to the client’s needs, with available formats configured per plan.
Current Status
The system is currently in production with multiple active clients. I dedicate my free time to maintaining and updating the stack and libraries used.
Technologies
- .NET — backend and business logic
- Blazor — interactive web interface
- SQL Server — main database
- Azure DevOps + CI/CD — continuous integration and deployment
- SignalR — real-time communication
- Hangfire — background task processing and configurable synchronization
- IndexedDB — local storage for offline operation
- xUnit — unit testing
- ASP.NET Identity — authentication and authorization
- MudBlazor — UI components