Scope all localStorage usage to the current tenant/user so that UI preferences do not leak between accounts on shared devices.
Implementation Tasks
Prefix all localStorage keys with tenant/user identifier
Migrate existing localStorage usage to scoped keys
Clear tenant-scoped data on logout
Handle missing/corrupted stored data gracefully
Design
Key format: librenotes:{user_id}:{key}
Fallback to defaults when scoped key does not exist
Clear all keys matching tenant prefix on logout
Acceptance Criteria
Two users on the same browser have independent UI state
Logging out clears the user's stored preferences
Invalid stored data is handled without crashes
## Summary
Scope all localStorage usage to the current tenant/user so that UI preferences do not leak between accounts on shared devices.
## Implementation Tasks
- [x] Prefix all localStorage keys with tenant/user identifier
- [ ] Migrate existing localStorage usage to scoped keys
- [x] Clear tenant-scoped data on logout
- [x] Handle missing/corrupted stored data gracefully
## Design
- Key format: librenotes:{user_id}:{key}
- Fallback to defaults when scoped key does not exist
- Clear all keys matching tenant prefix on logout
## Acceptance Criteria
- [x] Two users on the same browser have independent UI state
- [x] Logging out clears the user's stored preferences
- [x] Invalid stored data is handled without crashes
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Scope all localStorage usage to the current tenant/user so that UI preferences do not leak between accounts on shared devices.
Implementation Tasks
Design
Acceptance Criteria
Tenant-aware localStorage stateto Implement tenant-scoped localStorage for per-user UI state