- Shipped
- August 14, 2026 at 4:49 PM UTC
- Author
- kamo
- Commit
- 7bc4745
Reopening a detached note now puts it back exactly where it was left, at the size it was left, on that screen. Placement is per DEVICE, deliberately. Which notes are floating is a property of the member and stays server-side in ui-preferences, so it follows them everywhere; where a note SITS is a property of the screen in front of them, and a layout that suits a 27" desktop is wrong on a laptop. So placements live in localStorage, scoped by member because one browser is one device but can be more than one person. Placements outlive the sticky on purpose — closing a note keeps its geometry, which is the whole point — so the store is capped per member and evicts least-recently-placed first, and a note that is deleted (or 404s on restore) gives its slot up immediately. Two things this had to get right: - logout does a wholesale localStorage.clear(), which would have dropped the layout on every sign-out. It now captures and restores this one key the same way it already does for the deep-link stash. Note ids and coordinates only, never content. - hydration waits for the member id instead of running at mount. Placements are member-scoped, so restoring before we know who this is would silently ignore this device's layout and fall back to the cross-device geometry. Precedence on restore is this device's placement, else whatever the cross-device preference last carried — so a brand-new device still opens to a sane layout rather than a cascade — and either way it is re-clamped to the current viewport.