COP4331-LargeGroupProject-Fall22 / backend

Backend for SmartChef project, see https://github.com/COP4331-LargeGroupProject-Fall22/SmartChef
0 stars 1 forks source link

Decide on tech stack #2

Closed nashirj closed 1 year ago

nashirj commented 1 year ago

We need a tech stack that has a web and mobile component. We can use the same shared backend for both the mobile and web apps.

Web front-end framework options:

We can optionally use TypeScript instead of vanilla JS, which will help catch some classes of errors before runtime; I believe we have to use TypeScript if we decide to use Angular. Also, even though we're making a mobile app, we should make our website mobile-friendly. I personally hate having to download an app in order to interact with a website on my phone. Can test using Jest and Jest image snapshot

Front-end style helpers

Back-end options

I think a good option would be to stick to the MEAN/MERN stack and if we have an idea that can leverage ML/CV stuff, we can make a second Python API that is only exposed to the Node backend.

Mobile options

Since (I think) I'm the only one on the team (so far) that has a Mac, we should probably not do native iOS. I prefer cross-platform, but am open to doing an Android native app if everyone else wants to do that.

Misc

The professor suggests (not sure if it's a requirement) that we use Nginx for our web server and MongoDB for the database. We can prob just use those :)

We should unit test code for each of mobile, frontend, and backend using the respective tools for whatever stack we go with. It would be really cool if use GitHub actions to set up automatic build/test. We should also set up linting as a GitHub action for whatever languages we go with.

We can optionally use Redis for caching if we are limited by DB performance, but this might not help us if we have the DB on the same server as the application. Just mentioning since it could be an opportunity to learn an extra tool/get brownie points.

Once we decide on stacks, I'll make new issues splitting out required setup tasks (e.g. setting up GitHub actions, etc.).

mplekunov commented 1 year ago

Here is a problem though, from my understanding we MUST use EN part of MERN stack... so like, it doesn't look like we have much of the choice on backend?

nashirj commented 1 year ago

I think it's just recommended. The prof said we can use Python for the backend of the second project

mplekunov commented 1 year ago

I think it's just recommended. The prof said we can use Python for the backend of the second project

Personally, I would rather go with Rust lol... I hate python for the luck of types, for the same reason I hate javascript

mplekunov commented 1 year ago

but EN could be better because Uber/Google/Ebay and other big companies use that

mplekunov commented 1 year ago

For Mobile options, I'm for cross-platform. From what I read, if you don't develop games or something that could actually utilize the "nativeness" part of the platfrom you develop for, cross-platform is the way. It will help us to actually being able to deploy our app on ANY mobile platform be it Android/iOS which would increase the number of potential users (hypothetically)

mplekunov commented 1 year ago

Also, no one in their right mind would use Java for Android. All new apps are written in Kotlin, Java is only used for maintaining old apps and that's basically it. Kotlin is like a better Java, plus google is developing JetPack Compose for Kotlin specifically which only proves the point that they are trying to get away from Java 🤣

mplekunov commented 1 year ago

Never used Flutter, heard that Dart is not a bad language though. C# is VERY nice language.... TRULLY OOP language. You can do a lot of OOP things in C# without being too verbose. Heard that React is technically a go to when it comes to cross platform though.

mplekunov commented 1 year ago

Also, I think Angular is nice for web app, and I actually like the fact that you can include Types in TypeScript but like... The person who will be responsible for web-app development will have to be good at time management and google because they will have to google a lot.

nashirj commented 1 year ago

Tentative decisions on some stacks: Frontend: Vue.js (we can use Material for styling stuff) Mobile: Flutter Backend: Rocket, Flask only if we end up doing ML/CV stuff

nashirj commented 1 year ago

Here is a sample app that uses vue and rocket

mplekunov commented 1 year ago

Tentative decisions on some stacks: Frontend: Vue.js (we can use Material for styling stuff) Mobile: Flutter Backend: Rocket, Flask only if we end up doing ML/CV stuff

it's not "can" when it comes to Material... it's "must". Unless you want to spend endless time on doing css and stuff...

nashirj commented 1 year ago

There are other options, such as bootstrap, which is why I said can - we will definitely use some CSS framework

mplekunov commented 1 year ago

Wouldn't material be better though? We can use material for both web app and mobile app which will give us UI consistency.

mplekunov commented 1 year ago

I could be misunderstanding it with Material design btw

mplekunov commented 1 year ago

So.. Since we are going to use Clarifi API we are switching from Rocket to Flask or Django, right?

mplekunov commented 1 year ago

nvm they support Rust

mplekunov commented 1 year ago

img

nashirj commented 1 year ago

Yeah we are also not 100% going to use Clarifai, just a possible idea

mplekunov commented 1 year ago

I guess we can solidify that for the backend we will use Rocket (Rust). I mean, I spent like 2-3 days trying to understand the syntax and different parts of Rocket/Rust, so there is no way I'm switching to anything else 😄

nashirj commented 1 year ago

I'm marking this as resolved, seems like we have our tech stack locked down.

nashirj commented 1 year ago

Just so that it's on the record, the professor said we need to use Node + Express, so we'll be using those instead of Rust + Rocket