Unitec Distribution Systems runs managed uniform programs on behalf of its business customers: an employer contracts with Unitec, and Unitec handles the catalog, the customization of the garments, the warehousing, and delivery to individual employees. IdeaBlade has worked with Unitec since 2019 and built the two applications the business now runs on — a customer-facing ordering portal and an internal fulfillment system — replacing a single client-server application delivered over Citrix that depended on manual workarounds throughout.
Separating that system into two was the substance of the work. The portal and the fulfillment system are now distinct applications exchanging data bidirectionally over APIs, so an order moves from placement through approval, alteration, purchasing and shipment as one flow rather than through steps carried by staff. The separation also made possible something the combined system could not do: each customer defines its own catalog and naming conventions, mapped to Unitec’s master catalog, so a customer orders in the vocabulary its own employees already use while the warehouse works from a single master.
The largest single task was the data. Everything held in the old system had to be migrated into two entirely new databases with very different schemas and cleaned in transit. Because the two applications synchronize with each other, neither could go live alone: both were cut over at the same moment, onto the same migrated data, with no route back.
What we delivered
The Ordering Portal presents each business customer with its own catalog, naming conventions, pricing and permitted garment customizations, enforces customer-defined limits on how much of an item may be ordered in a period, routes orders through a customer-defined approval process, and gives customer administrators control over which employees may order and under which rules.
The Fulfillment System manages inventory, alterations and modifications, third-party purchasing and shipping, and exchanges order and status data with the portal bidirectionally over APIs.
Fulfillment reaches outside the application at three points, each a third-party system that becomes the authoritative record once an order leaves:
- Shipping through ShipEngine
- Card payments through Authorize.Net, with card details captured on the processor’s own hosted pages so the application never holds card numbers
- Accounting through QuickBooks Online over OAuth
Unitec performed most requirements analysis. IdeaBlade provided architecture, development and the initial user interface, deployed to Azure weekly throughout development, and shared QA with the client.
Technology
- Client: Angular 19 and TypeScript, with the Ordering Portal organized as an Nx monorepo; PrimeNG with Tailwind CSS; ag-Grid and ag-Charts Enterprise; Breeze for client-side data management.
- Server: ASP.NET Core on .NET 8 with C#; Entity Framework Core with Breeze persistence over it, and Dapper where queries are written directly; Microsoft SQL Server; Hangfire for background processing; Serilog and Sentry for logging and error monitoring.
- Operations: hosted on Microsoft Azure with configuration in Azure Key Vault; source control in GitHub; end-to-end test suites in Playwright for both applications.
Complexity
- Per-customer catalogs, pricing and permitted customizations held as configuration rather than code, so one deployment serves every customer.
- A mapping layer resolving each customer’s own catalog and vocabulary onto the master catalog.
- Customer-defined ordering limits evaluated against an employee’s history within a period, and customer-defined approval chains.
- Delegated administration.
- Migration of the whole legacy data set into two new schemas, cleaned in transit, with a single coordinated cutover.
- Three external systems holding the authoritative record for goods and money, each of which has to stay consistent with order state through returns, voids, refunds and restocking credits.
- Two applications that must stay consistent with each other across a bidirectional API.
Outcome
Both applications went live together in late June and early July 2026, onto migrated data, and are in production use. Because the systems synchronize there was no phased rollout available: the cutover carried both applications and the whole migrated data set at once. Weekly deployment to Azure was the standard throughout development, so the client exercised working software continuously rather than reviewing it at milestones.
Since go-live, Unitec’s own staff have taken over much of the development and maintenance of both applications, with IdeaBlade on call — a handover rather than a dependency.


