Case study

Industrial Saw Control Platform

Build and maintain production software for industrial saw systems using an Angular frontend, C# API backend, and Electron.NET desktop packaging, with RabbitMQ messaging and PLC integration.

AngularC#Electron.NETRabbitMQPLCDesktop
Industrial Saw Control Platform

Problem

The software has to coordinate user-driven workflows, machine state, and inter-process communication in a production environment where reliability matters. The challenge is not just writing UI or API code in isolation. It is making sure desktop behavior, backend logic, messaging, and PLC interactions remain predictable under real operating conditions while still moving quickly through sprint-based delivery.

Approach

I work across the Angular frontend and C# API to implement and evolve operator-facing workflows and backend capabilities together. I package the combined stack with Electron.NET so desktop releases remain consistent. I also contribute to messaging and machine-integration work, including RabbitMQ flows and PLC communication paths, and collaborate closely with other engineers during architecture reviews, sprint planning, and estimation to keep implementation aligned with system constraints.

Architecture

The application is structured as an Angular UI paired with a C# API and delivered as a desktop application through Electron.NET. RabbitMQ handles messaging between the saw software and other programs, while PLC integration provides control and telemetry pathways to the machine itself. The architecture balances local desktop responsiveness with explicit service and messaging boundaries so machine interactions remain controlled and observable.

Tradeoffs

A combined desktop-plus-service stack gives strong control over deployment and operator experience, but it increases coordination costs across UI, API, machine communication, and messaging contracts. PLC integration also favors deterministic behavior over rapid experimentation, so changes require careful sequencing and validation. The practical tradeoff is choosing incremental, well-scoped improvements that preserve operational confidence while still improving architecture and developer workflow.

Outcome

The result is a production platform that supports day-to-day machine operations with a cohesive UI, backend, desktop packaging model, and integration layer. Beyond feature work, this has strengthened cross-team engineering practices around architecture decisions, sprint execution, and estimation, helping the system evolve without losing reliability in the field.