Comment by ikurei
Congrats on shipping! I'll try it out on my next freelancing project.
I love this approach of local-first webapp, with optional sync afterwards. I've been working on a journaling/note-taking app with a similar approach, but finishing pet projects on limited free time is hard.
Could you share a bit more about the stack and your experience building it? What was challenging?
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.