01
Two framework majors without breaking the UI
- Problem
- The app was on Next.js 14 and Tailwind 3, with dependencies falling behind and security findings piling up. A big upgrade on a large app risks small visual regressions nobody notices until a customer does.
- Approach
- I upgraded in steps (Next 14 → 16, Tailwind 3 → 4, Jest 29 → 30, Node 24) and leaned on Playwright screenshot tests as a safety net. I stabilised the screenshots first, hiding dev‑only overlays and loading each app's environment the same way in CI, so every diff that remained was a real change.
- Outcome
- The upgrade shipped with visual baselines updated deliberately rather than by accident, and the dependency findings that triggered it were cleared.