Hey everyone! 😃
I'm so excited to start again/keep working on this awesome project! Since I started contributing, I've noticed that we are not being able to make progress in our features mostly because the main maintainers don't have time to dedicate to it. Also, I find our tech stack very complex. So, I decided to create this issue in order to discuss how we can improve that, to bring up some interesting stuff that I researched, and also as a knowledge transfer. I wanna come up with a new stack (should be an easier one) and improve our work model in general in order to attract more developers to help us.
I really love to work on Animavita, I could learn a lot contributing here and I don't want this project to die. However, I can't do anything by myself. I hope not to be alone.
Our goal
Besides helping people who are interested in adopting a pet or putting a pet for adoption, we want to help you to grow as a developer. You can confirm this by reading the section Contributing in our README. As I said above, I learned a lot here. Open source in general is a great way to highlight yourself to the community as well as to show to recruiters during an interview.
Our last dream for this project is to see it available for download on mobile stores. That would be awesome!
Difficult to start
If our goal is to help you as a developer, we should be more developer-friendly right? I'm saying that cause I know how hard it is to make your first contribution here, and that's why I made #84 trying to make this process a little bit easier. But it's still hard because it's not clear or maybe not very well documented how our business rules work. It's hard to understand when you first look at the code.
First things first
Our current default branch called next
is actually our 2.0 version which was supposed to be in development. However, we're stuck on this, and that's why I want to restructure the project. Our master
branch is actually our v1, kudos to @wendelfreitas and @renanmav who made awesome job there! The v1 (master) was finalized by Wendel and we started a v2 because we wanted to improve and launch a new application totally refactored using the latest front-end libraries, adding typescript and so on.
App Structure
Our application is structured in a monorepo with lerna and yarn workspaces. Each package in this monorepo is responsible for one thing and its name should be very self-explanatory. e.g. eslint is where we store linter configs. Our backend is the graphql
package. Our front-end is the expo
package. We have our design system completely separated in the ui
package. All the other packages are consumed by graphql
and expo
.
Even though we don't have a firmed pattern to organize our structure, we've been trying to use BDD (I know it's not about folder structure) and separate everything that makes sense to be separated from the other stuff.
What I wanna change?
Since I'm aware of the downsides of our project, I'm gonna give a few suggestions about what I think would be interesting to change or continue using. All my suggestions are to make this project easier, to get more developers interested in helping us, and to put Animavita on track again. If you already have contributed to Animavita, please, let us know what was most difficult for you. If you had never contributed but got experience working with expo, GraphQL, monorepos, please, leave your opinion as well.
- Replace relay with apollo.
Relay is an awesome library created by Facebook. But it's quite complex and less popular than apollo, in my opinion.
- Should we use some backend JS framework, like nest, or keep doing everything by hand?
I've been working more on the front-end side. So I'm not the best person to talk about that.
- Expo instead of bare react-native
Expo has improved a lot and I think it solves 90% of our problems. Unless we have a good reason to eject this app, I'd keep expo.
- State management
I'll go straight to the point: should we use redux or server-side state management? I'm a big fan of react-query 👀
- Login by e-mail
One of the biggest pain for our contributors was having to create a Facebook developer account and set up this in the app in order to have the app running. Let's add login by e-mail to streamline this auth flow.
- Start from scratch
Would you rather kill next
branch and start a new one, or try to refactor what we already have?
Below our v1 running. So before commenting, be aware that we want to keep all features that we previously had on v1.
That's it for now! Let's discuss guys, I need help. Feel free to comment here or to reach out, we also have a discord where you can join.