althea-net / rita-dash

User dashbaord for managing Rita
https://github.com/althea-net/rita
Apache License 2.0
8 stars 13 forks source link

Spec out native app on Iphone, Android, and Desktop #38

Closed jkilpatr closed 5 years ago

jkilpatr commented 5 years ago

figure out the best strategy and expected order of difficulty for each.

deadline: 10/29/18

asoltys commented 5 years ago

I read a handful of articles comparing some of the different options for mobile and desktop. Generally, the closer you want to get to having full access to all the native device functionality, native UI elements, and optimal performance, the more work it's going to be to get there from our current react/bootstrap codebase. Here are the main contenders as I see it, listed in order of ascending effort:

Mobile:

Desktop:

If we go the Cordova/Electron route we can wrap up the web app we have now with minimal effort and run it as a native app with access to some native device functionality through plugins. The drawback of this is that it won't look and feel like a native app, it'll look like a bootstrap website and won't be as performant/smooth when it comes to keyboard use, buttons, animations, scrolling, swiping, gestures, etc. We can mitigate that a bit by switching from Bootstrap to frameworks like https://onsen.io/ https://quasar-framework.org/ or http://photonkit.com/ that attempt to mimic native UI elements.

With React Native, we can keep using React but we'll have to refactor/rewrite our UI code to use the components that it provides to map to native UI elements. It's not clear to me how much work it'll be to maintain our current web UI alongside that. The advantage is that we'll then have a truly native app that should feel smoother to the user. The react native desktop libraries all seem to be fairly new/experimental so it's not clear to me yet how much work it would be to support all three desktop OS's and how good the UI's will actually be. I guess QT would run on all three or there's the option of targeting native UI elements there as well.

Flutter is Google's answer to React Native for targeting both iOS and Android. We'd have to work with a language called Dart and a different UI/styling framework than JSX/CSS. Sounds like it has good documentation and performance and Google is getting behind it but it's still new and doesn't have the same community as React Native.

Finally there's the option of going fully native on all different platforms. This would require using different languages, frameworks and tooling on all platforms but gives the most flexibility in terms of targeting platform-specific functionality, getting the most performance possible and offering the best user experience.

All things considered I think I'd like to try doing some proof on concepts in React Native and see how that goes and if the react native desktop doesn't look promising we can go with Electron. It might also be fun to build a terminal UI with https://github.com/chjj/blessed or https://github.com/gyscos/Cursive !