Upgrading a Legacy Monorepo to React 18: What Nobody Warns You About

React 18 shipped in March 2022. We merged our upgrade in April 2026. If you do that math, yes, we were four years behind. This is a post about what that upgrade actually looked like across a large, multi-generational codebase, and the specific issues that ate most of the time. Spoiler: the “breaking changes” in the official React 18 migration guide are the easy part. The Starting Point Our frontend isn’t one app. It’s four generations of React code living in the same monorepo, piled up over years of product growth: ...

May 11, 2026

Enabling TypeScript Strict Mode in a Legacy React Project: A Gradual Approach

Our App was created in 2017. It is a React application written in TypeScript. At the time, TypeScript was gaining popularity, but strict type safety wasn’t a major concern for most teams. Our knowledge of TypeScript was limited, and the primary goal was to use it for basic type annotations rather than enforcing a fully type-safe codebase. As a result, strict mode was never turned on. The codebase ran without the safeguards strict mode brings: strict null checks, no implicit any, and tighter type inference. As the project grew, that gap started to cost us. Subtle bugs slipped through, and refactoring carried more risk than it should have. ...

March 26, 2025