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 19, 2026 · CTRLDevs
Automated scans catch roughly a third of accessibility defects, and almost none of the ones React introduces. What client-side routing, portals, and conditional rendering break, how to test it, and where the React 19 and Next.js primitives help.
Read moreOctober 12, 2026 · CTRLDevs
Error boundaries stop a blank screen, not a bug. How to wire onCaughtError, onUncaughtError, and onRecoverableError, ship readable source maps, and get reports you can actually act on.
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
Remix folded into React Router v7, so a lot of SPAs now have a framework sitting one config file away. What framework mode changes, what it does not, and how to adopt it in increments instead of treating it as a reason to move to Next.js.
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 21, 2026 · CTRLDevs
Both routers run in the same Next.js app, which makes this an incremental migration rather than a rewrite. The order we migrate routes in, what breaks at the boundary, and the cases where staying on Pages Router is the correct answer.
Read moreSeptember 18, 2026 · CTRLDevs
A working test strategy for modern React: what belongs in Vitest and Testing Library, why Jest-to-Vitest migrations stall, and how to cover Server Components when the unit-test tooling still cannot render them.
Read moreSeptember 17, 2026 · CTRLDevs
What React 19 actions change about form code in an existing codebase: reading pending state with useFormStatus, modelling results with useActionState, where useOptimistic is the wrong tool, and how this sits alongside React Hook Form.
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 moreSeptember 11, 2026 · CTRLDevs
Most of a large Redux store is cached server data, URL state, and form state wearing the same coat. How to classify the slices, move them in shippable increments, and decide which ones should stay.
Read moreSeptember 10, 2026 · CTRLDevs
Boolean props multiply invalid states. How to model React component APIs as discriminated unions, where generics earn their complexity, and what changed for props typing in React 19.
Read moreMay 19, 2026 · CTRLDevs
Two programs, one tree: what the server/client boundary actually is, what follows from it, and the four mistakes teams make when adopting RSC.
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