Internal Tools

Operations Control Center

React
TypeScript
Tailwind
Node.js
PostgreSQL
Overview

Turning operational support into a controlled self-service system.

As the product scaled, routine tasks like user management, configuration changes, and account support kept landing in engineering queues. Each one was straightforward in isolation but the volume added up to a meaningful drag on the team. I designed and built an internal platform that let business and support teams handle these workflows themselves without anyone needing to open a ticket or write a script.

Before and After

Before

Support Request
Engineering Ticket
Manual Fix
Delayed Resolution

After

Operations Team
Self-Service Platform
Controlled Execution
Immediate Resolution
System Design

The platform sat as a controlled layer between the operations team and the core backend. Rather than exposing backend services directly, every action was modelled as an explicit workflow with its own permission scope, validation rules, and audit trail. The underlying systems never knew whether a request came from the platform or from an engineer running a script.

Operations UI
RBAC Gateway
User Management API
Config Service
Audit Logging
Core Backend Services
Key Decisions

Workflows instead of raw access

Giving operations teams direct API access would have been faster to build but impossible to govern. Every action was modelled as a named workflow with explicit inputs, validation, and a clear scope. This meant the platform could grow without the risk surface growing with it.

Role based permissions as the core primitive

Access was not bolted on after the fact. The permission model was designed first and every feature was built around it. Roles were scoped tightly enough that a support agent could not stumble into an action meant for a system administrator.

Audit trails that were actually useful

Every operation was logged with enough context to reconstruct what happened and why. When something went wrong the answer was in the log, not in someone's memory or a Slack thread from three weeks ago.

Keeping engineers out of the loop by design

The goal was not just to speed up resolutions but to remove engineering as a dependency entirely. That required understanding which workflows were safe to hand off, modelling the failure modes, and making the UI clear enough that support teams could act confidently without needing someone to explain what a field meant.

Tradeoffs

Modelling every action as an explicit workflow meant more upfront design work than a general purpose admin panel would have needed. The payoff was a system the business could trust. A general panel would have required constant guardrails and oversight. The workflow model made safe behaviour the default and made it genuinely difficult to do something destructive by accident.

Outcome

Engineering focus shifted back to the product.

Operational load on the engineering team dropped by around 70 percent. Support teams went from waiting days on tickets to resolving most requests in minutes. The audit log became a resource the business actively used rather than something that existed purely for compliance.