Comment by ffsm8
13 hours ago
Heh, I've been working on my own take on this since September.
Already scrapped 3 prototypes as I wasn't happy with the ux.
First version was purely with indexeddb storage too, and was definitely the easiest. (Simple persistence logic, only few entities)
I ultimately gave up on that approach because I don't want to do Data entry on my phone.
So I started with a split template (server) /imported (indexeddb)... But in practice, that's still annoying. I want to be able to access the data across devices, so a third version was born... And now I need proper syncing, which is obviously a significant challenge as it's easy to screw up/hard to make sure it works as intended.
Biggest reason for my current slump is however that every attempt I made to date with the most important UX - the mid workout tracking - feels annoying to use in practice...
Not sure where I'm going with this, I'm still trying out various ways so don't have any real suggestions right now
Other then maybe: the workout template you tease in the workout tab is actually easily implemented if you do it like FitNotes - add a button to the workout exercises for done, and then just provide a bottom to clone a previous exercise (with the bools false)
Haha that was an entertaining read, thanks for sharing. This is also my third attempt.
The first was much like this one with browser storage. There was a bug in Chrome that wiped out the persisted storage of all websites which nuked all of my records
https://www.bbc.com/news/technology-50809216
I tried rewriting it in React because it was the new hotness but spent so much time worried about component rendering cycles, hooks, state that just ended up distracting me away from time on the UI and UX. It was fast (like it matters), but ugly.
As for data sync, I've just added SQLite on the client and going through the painful process of normalizing the records.
My idea is, users will be able to supply a Turso API key and the app can sync against that, keeping a local copy of the data - eventually consistent.
I'll probably do something dumb like keep a timestamp of the last change and push/pull data periodically.
It only works because it's 1 person using the app and no one trains with two phones