Independent project · Case study · .NET + Angular · Flagship

One decision surface for multi-site operations.

Helvetic Operations Platform

A C#/.NET business application for managing operational Work Orders across multiple sites, with guarded lifecycle rules, concurrent-update protection, role-aware authorization and traceable delivery.

  • C#
  • .NET 8
  • ASP.NET Core
  • EF Core 8
  • Angular 22
  • TypeScript
  • SQL Server
  • Docker

At a glance

Problem
Multi-site Work Order control
Capability
Read + write workflows
Tests
49 automated tests passed

A decision that could have gone the other way

Authenticated browser tests need protected Entra sessions and a reachable test environment, so I kept them out of routine CI. I ran the eight Playwright flows in a dedicated non-production environment; all eight passed. The normal CI result and this manually triggered E2E result are reported separately.

Business problem

Operations leads need to decide which site requires attention before a service deadline is missed. Status changes must follow valid transitions, assignments must remain explicit, and the same business rules must hold whether work enters through the dashboard, an API client, or a future integration.

Key engineering decisions

Work Order transitions live in the C# domain model. Official EF Core migrations, SQL Server rowversion concurrency and atomic audit events protect persistence. FluentValidation and Problem Details define failures, while pagination, filtering and allowlisted sorting constrain reads.

Delivery setup

Microsoft Entra ID / MSAL authorization code flow and role-based access protect the implemented workflows. An NSwag-generated TypeScript client is checked for drift. Docker images and routine GitHub Actions validate the delivery foundation; a separate protected workflow runs authenticated E2E in non-production.

Current test status

30 backend tests and 19 Angular tests passed; the backend Release and Angular production builds passed. In the protected non-production E2E workflow on 5 September 2026, all eight authenticated Playwright flows passed. Production cutover and operational acceptance are not complete.

Engineering takeaway

Put operational rules at the domain boundary

Every write path should enforce the same lifecycle, authorization and concurrency rules.

Guarded Work Order transitions, FluentValidation, Problem Details, allowlisted sorting and rowversion conflict handling are exercised through backend and Angular tests.

  • Domain rules
  • Concurrency
  • Authorization
  • Contract safety

Design rationale

A modular monolith keeps the transaction boundary explicit while a generated NSwag client prevents the Angular contract from drifting away from the API.

Implementation status

Implemented

  • Work Order lifecycle and role-aware workflows
  • EF Core migrations, concurrency and audit events
  • Docker image and GitHub Actions validation
  • Eight authenticated browser flows passed in a dedicated non-production environment

Outside the current scope

  • Production cutover, operational acceptance and rollback rehearsal remain outside the completed project boundary.

All selected work