October 26, 2026 · CTRLDevs
styled-components is in maintenance mode and runtime CSS-in-JS cannot run in a Server Component. How to audit what your styling layer actually costs, choose a target (CSS Modules, Tailwind, or a zero-runtime library), and migrate component by component without a restyle.
Read moreOctober 5, 2026 · CTRLDevs
INP is three numbers — input delay, processing, presentation — and they have different fixes. How to attribute the slow interaction in the field, reproduce it under CPU throttling, and fix the phase that is actually long.
Read moreSeptember 28, 2026 · CTRLDevs
Implicit App Router caching produced stale pages and surprise dynamic rendering in equal measure. How the explicit `use cache` model changes the work, and the checks we run to establish what a route actually does today.
Read moreSeptember 21, 2026 · CTRLDevs
Three additions in React 19.2 that change day-to-day work: <Activity> for keeping unmounted UI warm, useEffectEvent for effects that read fresh values without re-running, and React's own tracks in the Chrome performance profiler.
Read moreSeptember 16, 2026 · CTRLDevs
Streaming is decided by boundary placement, not by adding more of them. How to find the slow segment first, why a boundary around the whole page buys nothing, and the layout-shift and waterfall costs of getting it wrong.
Read moreSeptember 15, 2026 · CTRLDevs
App Router caching changed defaults twice; client cache libraries did not go away. A decision rule for which reads belong on the server, which belong in a client cache, and how to run a mixed codebase without two sources of truth.
Read moreSeptember 14, 2026 · CTRLDevs
Hydration errors have one shape: the server HTML and the first client render disagree. A procedure for locating the disagreement, the five causes that account for most of them, and when suppressing is the correct answer.
Read moreSeptember 14, 2026 · CTRLDevs
A workflow for shrinking a React bundle that starts with a source-map treemap rather than a guess: find the real weight, remove duplicates and barrel-file imports, split at routes, and verify the change in field data.
Read moreSeptember 14, 2026 · CTRLDevs
The React Compiler is stable. A staged adoption sequence: run the lint rule first, compile one directory, measure commits before and after, and leave your existing useMemo calls alone for now.
Read moreJuly 21, 2026 · CTRLDevs
Why a green Lighthouse score and a Search Console warning can both be right: lab versus field data, what actually moves LCP, INP, and CLS in React apps, and how to instrument for it.
Read moreApril 14, 2026 · CTRLDevs
A repeatable workflow for diagnosing unnecessary React re-renders with the Profiler — and why moving state, splitting contexts, and passing children usually beat memoization.
Read more