-
-
Notifications
You must be signed in to change notification settings - Fork 359
Feature - Mobile client #20
Comments
Ionic works with react now. I don't know if it's ready for prod yet though. https://ionicframework.com/docs/react/overview |
I was hoping the site would be a mobile first PWA. This would mean there's no need for a dedicated mobile app. For example, I'm writing this on my phone without a GitHub app. What features are you considering that would require a device specific app? |
I completely agree with going for a PWA. |
Well first off maybe personal preference because I wanted to help with development and I am an Android developer. Then, I think the native approach is more stable. |
Strongly recommend going native, especially if we are serious about building a serious alternative to Meetup. - I have experience building Kotlin and Swift based apps and can offer help for both. |
I would also prefer going native. We can even go Kotlin multiplatform and share common code and business logic layer between the iOS and Android apps. |
Developing native apps will increase the contribution complexity. FCC relies on web tech (JS based- react, angular, what have you) that has easy access and low setup complexity. Especially for Apple devices, those without apple products cannot develop that easily. And as @bernhard-hofmann asked before, how will a native app trump over PWAs in our case? I believe the requirements are simple enough for a PWA. Overall, going native might be a speedbreaker in terms of development and community involvement. Please correct me if I'm wrong 😀 |
@kaushalgautam Why do you think that there won't be enough mobile devs joining this quest? :) In the end, as Quincy Larson said, we might have multiple mobile app projects and the best one will be selected as default one. |
I get your point. @vuksa. Of course, the best solution should be adopted and I don't underestimate the number of mobile devs that would step up. |
We should definitely start with a PWA. But what's wrong with react-native? Do we really need native for this? |
👋 I am also proposing that we use React Native for this since:
In particular, I think that Expo would be enough for this - it's quite powerful, more reliable than RN per se and offers a series of tools to make it easier to test & publish apps. (also, I'm heavily involved with the RN open source ecosystem and I would love to help with this) |
As I've read, the front end of the Web is going to be done in React, seems to me sensible build a multiplatform app with React Native, so that we can reuse the components. In terms of the PWA seems like an amazing idea as well (easier to get people in, nothing to install, no store interference), and react native already has react-native-web which provides an "easy" way to implement that. The new Twitter client for both mobile and desktop is a great example of what react-native-web is, and to be honest I don't see many performance issues with those PWA. Just seen @kelset comment (he basically read my mind), and fully agree. |
So long as it has a good web mobile site or at least doesn’t continuously spam users to install another app. |
I would vote for Flutter if we have enough devs out here who are interested. Else we can go with native(Kotlin/Swift). Recently our team worked on app for a small fest which was totally developed in flutter -> https://play.google.com/store/apps/details?id=com.poshmark.poshfest&hl=en If it is native we should be very fine with everything right from architecting the app. But Im not sure about flutter. |
I would hope we'll have enough Devs from all camps involved for the tech stack to not be an issue. My concern is the selection of stack and native vs. PWA before we agree the functionality / requirements. If we start with an agreement on what we want users to be able to do, we'll be better equipped to make decisions on native vs. web. That being said, I liked the idea that all client apps should use a common API, and we let nature take its course to find the most loved client/s. |
This isn’t really a this vs. that issue. MVP a mobile first site and a native app as supported then let users pick what they want, instead of forcing them into one or the other. |
I think native is the way to go as well. I work on IOS and looking to help out |
I'd like to share my opinion on the topic: Since this is an open-source project and we want to deliver the MVP as soon as possible with the highest standards at the same time, I'd recommend Flutter. Not only from my personal professional experience but because Flutter has worked in two different open-source projects that I'm helping maintain, two apps that are created for non-profits: https://github.com/FogosPT/fogosmobile The advantages are clear:
If this is the chosen path, I can help creating a structure for the project similar to what we have in the VOST project. |
If someone is looking to attract more of the folks with the related skills for this feature then we've been logging the various skills from people in the Discord channel. Also, folks are posting directly on the Github thread. So, see the list of volunteers and skills at #11 (comment) |
I agree with the decision to focus on web first and let it be a free for all on which platform to build the mobile app in: We have a lot of choice in the landscape:
Have I missed anything/anyone? |
Kotlin Multiplatform, but I'm super biased. |
I did a ton of research on the technical and market aspects of PWAs a few months ago (slide deck, video) - I think they are always an easy way to add a lot of power, since they basically only require adding a I would vote for adding the PWA features to the MVP web version, which should be super easy to wrap in a native framework to get in the native app stores. The real power comes in pushing notifications (which a PWA can handle) - I don't see any issues discussing that feature yet...? |
PWA's solve a non-problem, which is distribution. If the goal was a web MVP, I'd just go directly to wrapping the web code for a hybrid app, or later worrying about PWA, but not complicate the development now. MVP first, refactor later. I run a mobile shop, though, so my perspective may not be applicable. |
Question having worked on the hardware side of mobile, but not the app side. How bandwidth intensive do you believe this may be? Thinking from a standpoint of if we want to get this everywhere eventually, not all potential users will have access to 4G or 5G networks. Would there be a feasible way to test/optimize a mobile app for lower bandwidth availability? |
Low? It's a data app, and not a live updated data app. Maybe media in the form of images if you're trying to replicate Meetup features (although the more content people can post, the more monitoring will be an issue. Images especially) |
I like the idea of React Native, we should be able to abstract our business logic in redux. And use React only to render. |
Distribution is only a non-problem for native apps since their only channel is the native stores. Web apps have to be reachable everywhere, and PWA tooling broadens the reach quite a bit with a tiny amount of user education. They also provide some simple offline caching, which helps with bandwidth and performance (both important for something intended to be super low cost to run), and provide notifications like reminders and push, which drives user engagement (vital for this kind of application). |
^ In addition to the above, given that we're talking about self-hosted Chapters, you'd either have to have a native client that has the ability to connect to (and handle auth to) an arbitrary API...or one or more PWAs that can be added to the home screen right from the site as a user is browsing. The closest analog here is Mastodon instances IMO, and in their case the PWA setup worked quite well when I last played with it (granted, I'm on Android, where PWAs haven't been third-class citizens since roughly 2008). |
I do agree with @iansltx if we are talking self-hosted chapters, nobody would want to download native apps for each of chapters and I think PWAs can be much lighter and easy to discover and distribute. |
Why not have multiple instances inside the same app? What I mean is something like discord, you have an app with multiple servers running and you can join in one if you have the invite link or if someone invites you. I have worked in events apps before, and let me tell you, it can be a bit cumbersome to have 20+ apps in your phone. And then next year the organizer wants to change the name to "CompanySponsoredByX" and you have to download yet another app. Centralizing it all would be a better option, in my opinion. |
@Vanethos Do you want In all seriousness, API-wise you could build a mobile app that reaches out to the various Chapter instances by URL, authenticates to each, and syndicates everything in one place. But the access pattern wouldn't look like Discord (because Discord is a centralized thing where you have one identity across the board). It would look more like Slack than Discord, except each server would be completely different ('cuz self-hosted). So really more like a multi-provider-inbox email client. |
I like the idea of having one app that communicates with all "meetup" services. Having multiple apps would be heavy and non-practical especially if you have in mind that many of us have up to 15 meetup groups that we are currently joined in. I agree with @iansltx, it would be more like the slack app, where you could join "meetup" via invitation. Developing the MVP of an app that supports this definitely wouldn't be that trivial and quick. So what is the general plan, should we have two teams where one is developing a native app and another that develops cross-platform app? It is clear that we have mixed opinions here if we should go native or cross-platform. |
In the manpower time spent on this topic, someone could have hacked a responsive version of the website, & added a PWA in an extra hour or 2. Honestly, please just make sure the API rocks, & let whomever want to write native apps spin off their own team. |
@brianrichins Agree to disagree. PWA's just haven't really had the traction people want, for reasons. Mostly iPhone, but that's a long debate. I don't agree that making something work well on mobile is just a couple little tweaks. It's far more complex. Also, caching is the most efficient way to have stale data in your app. That is a complex topic, very much so for an app focused on data. If it were just that simple, nobody would be making native apps. The world is just not that way. I'm not saying PWA is bad, but should probably not be a focus on day 1, and it's not as simple as you're saying it is. I say that with a decade of experience in mobile, and spending 100% of my time researching "cross platform" related topics. |
I've had experience with building PWAs, imo it is probably too immature still. I have come across an issue that was opened in 2015 but the fix only came mid this year in Chrome 76. Be prepared to run into issues like this, if going the PWA route. |
An additional observation point. PWAs have much greater popularity in places like India, SE Asia where the phones are lower powered and data plan relatively more expensive in terms of purchasing power. Given that FCC is a world wide mission, I think there's a benefit in PWA here. With that said, as long as there's a solid API, I don't see why there can't be both PWA and various mobile clients. I mean hackernews has about a dozen clients for people to pick and choose. Dev.To is another that started out as PWA and eventually built native mobile apps. I think users should have to option to choose their preferred clients given their hardware and data limitations. |
At the end of the day, we have a ton of eyes looking at this. As soon as we get a reasonable API, there's nothing preventing parallel development of platform-specific native, cross-platform, and web-centric clients to said API. I'm sure that there are a dozen folks who made intros in #11 who have played with full-on PWA stuff, and several who could build a native mobile app for one platform or another. So once there's an API, or at least an API spec that isn't a moving target (we aren't there yet), dev client-side can happen in parallel by folks who know what they're up against on each platform. |
I think that this is inevitable, whether by the community as a group effort, or by individuals. There are plenty of competing Hacker News clients, for example. Like @kelset , @espipj , and @isubasinghe, I cast a vote for React Native. Not least because it's based on React (which has been agreed upon as the UI runtime for the web implementation), but because React Native has the broadest platform reach: iOS, Android, tvOS, Android TV, Web, macOS, Windows, Linux, and more. Most of these are used in production (tvOS by Salesforce, I believe; Web by Twitter; macOS & Windows by Microsoft). I've also produced apps with React Native Web and React Native macOS myself, so I can attest that they're not just good on paper; they work in practice as well. By using React Native, we can have a singular uncompromising client codebase, rather than fragmenting it into several different projects that fall out of step every time the server-side code is updated. What's more, the language of React Native is JS/TS, which is familiar to both web developers and cross-platform developers alike. JS is renowned for its comprehensive package ecosystem, and the React Native package ecosystem is particularly comprehensive (many packages even extend support to React Native Web, such as React Navigation). For lacking all of these benefits, I would vote against Flutter, as – to my understanding – it is only practically a solution for iOS and Android, with Web and desktop support being far behind that of React Native. The language, Dart, will be different to that of the JS-based web client, so it would create a communication barrier between the mobile and web development teams (not to mention killing the possibility of code-sharing). Lastly, it is a relatively new framework, so I would expect there to be a relative lack of expertise in it compared to other frameworks (though this may be contentious). And for much the same reason of lack of code-sharing, I would vote against purely native development as well. |
I understand that building a PWA could be easier than a native app, but from my POV the native app would be more beneficial in terms of performance. Also if the community decides that a native app is more beneficial I suggest Flutter as the framework to be used and vouch @Vanethos advantages of going with Flutter |
IMO the MVP should be a mobile optimized web client. That way we can focus on the API and finding a graphical layout that works before possibly expanding to other technologies. |
Mockups for the MVP are being discussed in #114 . The latest comment at the time raises a concern about CSS Grid's lack of backwards compatibility, and touched upon the issue of low-conformance and underpowered devices being popularly used in certain areas around the world. I'd like to open discussion on how best to cater for such low-spec devices and flaky network conditions, as this wasn't a clear requirement from the beginning (please clarify if we have a stance either way on this). It is an essential consideration for the mobile client (so I'll raise the discussion here), but likely overlaps with any considerations for the web client; the desktop client is probably less of a concern in this respect. William Imoh gives an excellent presentation highlighting the prevalence of poor network conditions in Africa and how to design around them: Slides; video. As for low-conformance devices (i.e. old, cheap ones), I imagine that more compatibility can be enjoyed by creating a (native) mobile app than a web-based PWA, but maybe that's wishful thinking. So far I have advocated for React Native (and React Native Web), and I still think that it fits as a solution in these cases – the Twitter client is based on RN (for native mobile) and RNW (for web), and Twitter has long been a favourite tool for communicating over poor networks with arbitrary devices. If the RNW client is found to be too sluggish for low-spec phones, an RN-based architecture would allow mobile users to just pick up the React Native (native) equivalent of the web app instead. |
Twitter as in the company's client app? I know several current and former Android developers at Twitter. I'd be amazed if that was true. Facebook barely uses RN. I think the marketplace did at one point. The rest of the app is fully native. RN for mobile is somewhat of a personal preference choice. It's generally much better on iOS than Android. I don't really understand why RNW exists. RN exists because React for web is so popular. |
It's certainly made in React Native Web (it has been since 2017), and the mobile app is certainly made in React Native. See the front page of the repo:
You can examine the source code for the Twitter website and see that there are mentions of React Native in its
I can't report whether it's any better on iOS than Android, but regardless, it's the state-of-the-art for production-level native & web code-sharing (and honestly, works remarkably well – I use it myself).
React Native Web exists to allow you to use the same JavaScript or TypeScript code to describe both a PWA and a React Native (thus: native iOS/Android mobile) app. In the same spirit, there are also other projects such as "React Native macOS" to allow one to build a macOS app from your singular React Native codebase. Due to these projects that add extra platforms, React Native should be regarded as platform-agnostic app framework rather than just an iOS/Android app development framework. Of note, regarding the question of suitability over poor network conditions: I found that Addy Osmani himself reports that the Twitter React Native Web app works great even on mobile devices over a 3G connection. Can't get much higher advocation than that. |
#144 aims to figure out support web browsers. I suspect that's relevant to the latest mobile conversation, so linking this post. |
This issue is on the roadmap, which means we will get to it after our MVP. I will close this issue for now so we can focus on resolving our non-roadmap issues first. |
I think we should discuss whether to use full native solution (Kotlin/Swift) or try Flutter for making apps. Personally, I do not think Ionic or other platforms relying on C# or JS are good for this project.
The text was updated successfully, but these errors were encountered: