[x] Basic persistence with localStorage. Add storage keys as constants.
[x] Auto sync app state with localStorage whenever there are changes.
[x] If the current file is encrypted, require password prompt to see the data whenever the app reloads. Or maybe for convenience, let the key be stored in sessionStorage to quickly decrypt the data.
[x] This means data in localStorage needs to be encrypted by default, and only stored in plain format if encryption has been disabled.
[x] However, it might be more convenient to keep localStorage state unencrypted, to allow quick app starts. This is probably what the majority of people want, and then we could optionally enable local encryption to turn the app into a private, personal diary that only you can open.
[x] If we store local data unencrypted in localStorage, it assumes you want to save data in that browser. If you don't trust the device, then clear browsing data for the app - or use a private browser tab. This gives a good trade-off between security and convenience.
Future related tasks
[x] Encourage people using the app to export data to a link or file.
[x] Add confirmation dialog before clearing local data
[x] Add confirmation dialog before opening file (and overwriting the local data). Or even better, automatically combine all imported data. And let users delete specific entries if they want to, and then re-export new link or file.
Future related tasks
storage
event to check if the data was updated in another tab https://developer.mozilla.org/en-US/docs/Web/API/Window/storage_event