The most-visited page in the dashboard got a full layout rework as part of the UI refresh. Visually it looked better. Three regressions shipped with it.
Regression One: Crash on Return Navigation
The page fetched data in a lifecycle hook that didn't clean up after itself. Navigate away before the request finishes, come back, and the response tries to update state on a dead component.
In our testing environment, the timing never lined up this way. Under real usage with real network latency and real operator behavior, it surfaced reliably. The fix was straightforward, but first we had to figure out what was happening.
Regression Two: Layout Shift on Data Load
We had introduced skeleton loaders as part of the same rework. The idea was right, but the CSS spacing for the skeleton layout didn't match the actual content spacing. When data arrived, the cards jumped. That defeats the entire purpose of skeletons. A layout that looks stable while loading but shifts when it resolves is worse than no skeleton at all, because now you've trained the user to expect a shift that doesn't always come.
The fix was to measure the real content layout and copy those values into the skeleton CSS.
Regression Three: KPI Fields Blank
The page displays four headline metrics at the top: availability, performance, quality, and overall OEE. During the rework, these fields got dropped from the data mapping. The cards rendered, the layout was right, but all four KPIs showed nothing.
We had to trace the entire data path to find where the mapping broke. One field reference, easy to fix once found, easy to miss without deliberate coverage.
What the Rework Got Right
The skeleton system became the pattern we now use across the entire dashboard. The responsive behavior improved at the same time. And it reminded us that every data path through a component needs at least one smoke test that checks the output, not just that the component renders without crashing.
A layout rework that looks clean in a developer's browser is never finished without tracing every data path end to end.