what i learned intentionally breaking hydration in next.js A developer intentionally broke hydration in a Next.js app to understand how it works internally. By causing mismatches with new Date(), typeof window, and Math.random(), they discovered that hydration relies on exact DOM matching and that React silently fixes mismatches in production. The exercise revealed that hydration is not a full re-render but a walk of existing DOM to attach fiber nodes. i did something dumb last month. on purpose. i sat down, opened a next.js app, and tried to make hydration fail in every way i could think of. not because a bug forced me to. not because i was debugging something. just because i wanted to see it. understand it from the inside. and honestly? best few hours i've spent learning anything in a while. why i even did this you know how you use something for months and you think you get it, but you don't really get it? hydration was that for me. i knew the surface-level thing: server renders HTML, client takes over, they gotta match. cool. got it. moving on. except i didn't get it. i just got the vibe of it. every time i saw hydration mismatch, i'd ask claude, fix the immediate thing, feel vaguely annoyed, and move on. i never stopped to ask why that specific thing broke it. i was treating symptoms, not understanding the actual disease. so i decided to break it deliberately. if i caused the errors myself, i'd actually have to understand what i was doing. the setup basic next.js app. app router. a few pages. nothing fancy. i wasn't trying to build anything. i was trying to destroy something, carefully, so i could see what fell apart and why. break 1: the obvious one - new Date on render this is the classic. everyone's seen it. export default function Page { return