Every timestamp the web app shows (settings, sessions and passkeys, the activity table, the admin user and audit tables, flags, todos, imports and the files trash) now goes through one formatter, useFormatDate and <FormattedDate> in apps/web/src/platform/format/. Before, each place formatted on its own in whatever time zone the code ran in: the server rendered in UTC, the browser in local time, and React threw a hydration text mismatch (#418) for every visitor outside UTC. The settings page did so on every load.
The browser now stores its time zone in a tz cookie, and the server renders dates in it, so from the second page view the HTML already shows the times the visitor will see. A first visit renders in UTC and corrects the time right after hydration, without an error. Dates also follow the UI language now (05.11.2026 in German), where most of them were English before. A test fails the build if a feature formats a timestamp any other way; the rule is W16.