Comment by heresjohnny
4 months ago
Yeah this took quite some weekends :) Just hang in there and you'll get a project shipped too!
I'm using Angular (yes, really!), and some date-fns utils for the time-related logic. Other than that, it's all custom except for the Catalyst UI library and Frappe charts. The hardest thing to solve was the event-driven foundation (which I'll use for sync support later).
Initially, I started out with Automerge/Yjs but figured that simple event sourcing would be good enough given there's no collaborative/concurrent use case. The benefit of that is that I can actually explain the logic. Not saying those projects lack documentation (they don't), I'm just not comfortable shipping a CRDT that I can't explain e2e. Might change once I have time to dive in properly.
Thanks a lot for your answer!
How about the database? You're just using IndexedDB for the persistence? How was the experience of working with it?
Similar I'd love to hear anything you can share about how you are persisting the data. I've been working on the web version of the recommendation todo app that I'm building and so far, since I know basically nothing about web development, I'm storing everything in cookies *ducks*.
The IndexedDB API [1] is fairly easy to work with. I personally use idb [2] as a wrapper, but that's optional. The hardest part is getting it neatly integrated with whatever you're using to manage state. I use a centralized Redux-like store to push events to, which then get automatically persisted to Indexed DB. Hope this helps!
[1] https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_A...
[2] https://github.com/jakearchibald/idb