An E2E encrypted link/bookmark management app, which will be called StackMarks. The idea is to be able to ‘talk’ to yourself and send text messages, images or files, organised into topics and be able to receive them on any device you own. I don’t know if anyone would actually find this useful but I definitely feel the need for something like this, since I find the idea of having a FIFO ‘stack’ of short-lived links or notes much more practical than all the alternatives I tried.
The challenge mostly comes from having everything encrypted. Some problems I have found so far:
- How to manage schema upgrades of encrypted JSON object data? This would be a simple migration if the data wasn’t encrypted. So far I’ve thought of adding a version field to each encrypted object and add migration steps to upgrade from each version to the newest so old messages would be migrated as they are fetched and then updated with the new schema.
- How to handle synchronization between devices and make it fast and reliable? I’ve thought of adding an endpoint that accepts a cursor and returns the list of changes made to the user’s data since then, such as messages added, updated or deleted which would trigger a API fetch or state update on the app. This could be sent over websockets and a regular endpoint for when it’s down. This is modelled nicely as a queue of changes to the DB for each user from the beginning, where the DB only contains the final state after all changes.
- How to handle conflicting changes made simultaneously so as to not delete user data? This is still mostly unsolved for me.
- There’s probably more as I keep implementing.
This idea has been brewing in me for at least a year now :). Glad I finally got started on it. I would love to hear your thoughts.
The challenge mostly comes from having everything encrypted. Some problems I have found so far:
- How to manage schema upgrades of encrypted JSON object data? This would be a simple migration if the data wasn’t encrypted. So far I’ve thought of adding a version field to each encrypted object and add migration steps to upgrade from each version to the newest so old messages would be migrated as they are fetched and then updated with the new schema.
- How to handle synchronization between devices and make it fast and reliable? I’ve thought of adding an endpoint that accepts a cursor and returns the list of changes made to the user’s data since then, such as messages added, updated or deleted which would trigger a API fetch or state update on the app. This could be sent over websockets and a regular endpoint for when it’s down. This is modelled nicely as a queue of changes to the DB for each user from the beginning, where the DB only contains the final state after all changes.
- How to handle conflicting changes made simultaneously so as to not delete user data? This is still mostly unsolved for me.
- There’s probably more as I keep implementing.
This idea has been brewing in me for at least a year now :). Glad I finally got started on it. I would love to hear your thoughts.