Umai, an offline-first Recipes Manager

Umai

Homepage | Source Code | Report Issues

License: GPLv3
Author: Noel De Martin

Umai is a simple Recipes Manager to collect all your precious recipes.

  • :green_book: Create your own cookbook.
  • :sparkles: Import recipes from any website.
  • :mage: Adjust ingredient quantities automatically.
  • :man_cook: Share recipes with your friends.
  • :iphone: Use it completely offline (itā€™s an offline first PWA!).
  • :closed_lock_with_key: Keep data safe in your Solid POD.
Screenshots

7 Likes

Impressive. Thanks

1 Like

Itā€™s great to see itā€™s announced here. Very elegant interface. Though unfortunately it has some i18n issue :joy: (Doesnā€™t work with Chinese content.)

I noticed ā€œoffline-firstā€ this time, which triggers my alarm about CRDTs (I see you mentioned this elsewhere) ā€“ Iā€™m trying to understand how CRDTs work and how to work with Linked Data for a synchronization mechanism like CRDTs (thus enabling the possibility, though maybe not very useful, to use Solid Pod as a backend/peer).
How is offline-first implemented for Umai? Is it storing data inside browser storage, and send/sync that with the Solid Pod; or is it using CRDTs, with one peer storing to Solid Pod (thus having the ability to connect with more peers)?

Thatā€™s unfortunate :confused: Can you share more details about this opening an issue in GitHub? (and maybe share an example url as well, so that I can reproduce it).

Also, if youā€™re interested in seeing the app in Chinese this time Iā€™ve prepared it so that it can be translated :D. Check out the translation guidelines.

I talked about this in this other thread: Request for Comments: CRDTish approach to Solid.

TLDR: The data is stored locally in IndexedDB, and when itā€™s synchronized with the POD other than the recipe data, a list of operations are sent. That way, when other devices get data from the POD theyā€™ll get the operations and merge changes instead of overriding. But yeah, itā€™s CRDT mediated by the POD, not peer to peer (although technically the architecture allows it to work that way, but I havenā€™t implemented it).

Sure. Iā€™ll open one. Unfortunately I canā€™t share an example URL becauseā€¦ it didnā€™t allow me to save the recipe.

Good to know itā€™s there. Will take a look.

Whoops. Missed that thread. Iā€™ll check it out.

Wonā€™t that be a significant storage overhead if the CRDT operation history is very long?
(Maybe I should check out the other post first.)

Ok, I was assuming you meant that it didnā€™t work using the ā€œImport from the webā€ functionality. If it doesnā€™t work by creating a new recipe from scratch thatā€™s even worse :sweat_smile:. I guess you can write the Chinese text in the GitHub issue (like recipe name, description, etc.) and I can reproduce the problem by copy-pasting the content.

Yes, thatā€™s one of the concerns I raise in that thread :/. I donā€™t have any solution for now, so Iā€™ll see how it goes and find some solutions when and if it becomes a real problem. Some ideas I have for example is squashing history and such, but I figured itā€™ll probably take a long time until I need to tackle that.