Finally settled with…
Expo - for Both Web and Mobile
Though I wanted the ease of developing a pure web app and wrap it with Capacitor or some sort (including Tarui), I struggle to make it work on Android because of how the webview works so differently than modern tech.
Tarui can be desktop focused, which is an upside. However, it’s just a wrapper for all platforms at best. It will suffer from limitation of web technology, including dragging gesture on the phone workaround is needed and offline storage capacity, etc.
Anyway, I can also wrap my Expo React Native project in Electron if I wanted a desktop app later on.
LegendState
Claimed to be more efficient and modern than MobX (which was my favourite). But, the main reason I’m using it in this project is the built-in plugin for offline synchronization with Supabase. There are a few bugs and workaround needed, but so far it’s been working nicely.
I can use IndexedDB on the Web and SQLite on Mobile, which is exactly what I want for to be able to leverage the best out of all platforms.
Supabase
Simply because Postgres is to go-to and it provides out-of-the-box support for Auth and Stripe integration. I tried using self-hosting Appwrite with RxDB, however, there are weird issue and it was on the Capacitor project, so I kind of put that aside for now. It wasn’t a bad idea though. But I will use LegendState even for Appwrite next time, because RxDB isn’t free to use SQLite on mobile.
Stripe
Only solution for online SaaS. And, there are starter template with Supabase, so I’m building on top of it.
Lastly…
I’m grateful I’ve worked it out now. I only need to build my apps now with this stack and get familiar with it to build all the other apps I wanted.
Too easy.