I want to start a relatively simple application / SaaS and need your input about the tech stack on mobile.
It will have a relatively simple server backend, and an app which should include an API, database, payment processing and email notification. Plus a bit of marketing pages.
For an app, I'll go with Clojure & Postgresql, since I'm most familiar with it. The rest of the site will be just statically generated, using some existing tools. The frontend will be a mobile first web app, written preferably in Clojurescript.
I will also need an Android and iPhone app. Here I don't know how to handle it, since I'm out of touch with mobile development. I'd like to avoid having to write native code for both platforms.
I'd like to reuse the frontend part of the web app. Maybe wrap it inside a web view component and call it an app? What is the best way to do it? Progressive app would do, but then, it won't be in the app store.
I see one option would be Ionic framework, which allows using the same code on all three platforms, and build separate app from the same code base. Is it the way to go?
Flutter should now theoretically support all three platforms, Android, iPhone, and Web. Jetpack Compose too, as well as react-native. But these look, too complex to me. Too many layers of indirection.
Which tech stack would you use? What is the best approach for an app, that maximizes code reuse and limits the need to write platform-specific code?
Flutter might be a good option, but personally I don't think it's there (yet), and I have my reservations about a few fundamental choices.
I'm not super familiar with Ionic, but afaik it's more of the Hybrid approach, web on native. It serves its use cases, but comes with its own set of challenges. It might be an option for you.
One option you didn't mention is Xamarin. I'm not familiar with it, but if .net is your jam it might be an option.
I would go with React Native. It uses native widgets, is reasonably fast (fast enough for most apps), it's flexible, and very productive.
You might even be able to use ClojureScript, a quick google search suggests it has been done before, for example see https://cljsrn.org/. I have used ReScript before with React Native, it complicates some things, but worked surprisingly well. That's one of the advantages of React Native being JS, you can still use the compile-to languages.
React Native isn't very complex imo, especially not for a simple app. If you use something like Expo it's really easy to get going and very quickly build very decent apps.
Updating packages can sometimes be a challenge, but even that has gotten a lot better, and this is not exclusive to RN.
React Native also has a very good web story, so you could serve all platforms. See https://necolas.github.io/react-native-web/ it's used by some massive companies and platforms.
As I understand it they have released some of their mobile dev REPL tooling under an open-source license (Krell).
Good luck!