The brief explicitly allows this: no real login, just a unique user we persist server-side. - [ ] UUID + random display name in `localStorage` under `t19.crate.user` - [ ] sent as `userId`/`displayName` on every mutation - [ ] server `INSERT … ON CONFLICT DO NOTHING` into `"user"` - [ ] tolerate corrupt storage (start fresh) **Acceptance:** a review written in one browser session is still there after a reload and is attributed to the same display name.