For the web experience, users will need the following:
Local Data
Data will be stored locally in the user's browser.
This data should be read from and written to in JavaScript in a convenient and efficient manner.
A database-like interface would be ideal.
External Data
Data should be exportable from that browser to an external source.
The user is expected to access their data on multiple browsers. The local data of those browsers is kept in sync through the externally saved data source.
Any solution should have a method of resolving conflicts in the data.
One external source should be a locally saved file, which is an export of all the data that can be imported to a new browser.
A locally saved file is expected to happen occasionally, and be a manual process. The user would be prompted to save or load the file when it is appropriate.
One external source should be an API that will save the data, and that can be called to import the saved data to a new browser.
If an external API is used, the data should be synced to the external API whenever a significant change to the data is made.
The externally saved data may be saved as a single encrypted blob, encrypted shards, or individually encrypted fields.
Security
The data should be encrypted when it is sent and received from any external API.
Stretch Goals
Ideally the user's data is stored locally in their browser in a secure way so that other user's of the same browser cannot access or use it.
Ideally there would be a way to prevent a user from uploading and using an out of date or corrupted saved file.
Investigate user-owned APIs like Dropbox to determine the scope of adding integration for them.
Deliverables
[ ] Investigate solutions like couchDB to see if they will work as a solution.
Description
For the web experience, users will need the following:
Local Data
External Data
Security
Stretch Goals
Deliverables