Uma aplicação que facilita o encontro entre alunos e professores particulares
Essa aplicação foi desenvolvida em uma NLW (Next Level Week) da Rocketseat, uma semana de imersão nas tecnologias JavaScript onde é desenvolvida uma aplicação de ponta a ponta (back-end, front-end e mobile). Ao final da semana foram passados desafios para incrementar a aplicação à uma versão 2.0. Esse projeto se trata da minha versão final da aplicação, tendo inclusive diferenças em relação ao que foi proposto. Me dediquei nesse projeto com o intuito de praticar meus conhecimentos na stack e acrescentar no meu portifólio.
Trata-se de uma plataforma para professores particulares se cadastrarem e alunos poderem entrar em contato. Quem tiver interesse em ensinar pode cadastrar sua "aula" informando uma breve descrição, as matérias que domina, o preço da sua hora/aula, o número de contato e quais horários tem disponíveis (dia da semana e hora). Quem tiver interesse em ter aulas pode filtrar os professores pela matéria, dia da semana e horário.
- Cadastro de usuário
- Autenticação
- Recuperação de senha (envio de e-mail)
- Edição de dados do usuário, incluindo senha
- Upload de foto de perfil do usuário
- Cadastro e edição de aula
- Listagem com filtro de todas as aulas cadastradas na plataforma
Realizei o deploy da aplicação no Heroku, você pode acessar através dessa url
Fiz a documentação no Insomnia e usei o insomnia-documenter para gerar a documentação. Ela pode ser acessada aqui
- express
- aws-sdk
- bcryptjs
- celebrate
- date-fns
- jsonwebtoken
- multer
- nodemailer
- pg
- typeorm
-
cd proffy-api
-
Instale as dependencias:
yarn install
-
Crie o arquivo com as credenciais da aws de acordo com o arquivo exemplo
awsconfig.example.json
. Ou veja aqui outras formas de configurar as credenciais da aws, se preferir -
Configure as variáveis ambientes (recomendo criar um arquivo
.env
) de acordo com o arquivo.env.example
-
Certifique-se de criar o banco no PostgreSQL de acordo com a configuração das variáveis ambiente. Ou veja aqui como configurar o TypeORM de outras formas, se preferir
-
Rode as migrations para criar as tabelas no banco de dados:
yarn typeorm migration:run
- Enfim, execute o server:
yarn dev:server
Realizei o deploy no Netlify, você pode acessar nesse link
- axios
- react-icons
- react-router-dom
- react-select
- react-spinners
- react-spring
- react-text-mask
- typescript
- yup
-
cd proffy-web
-
Instale as dependencias:
yarn install
-
Configure as variáveis ambientes (recomendo criar um arquivo
.env
) de acordo com o arquivo.env.example
-
Execute o projeto:
yarn start
Realizei o build do aplicativo no expo e você pode baixar o .apk neste link
- @expo/react-native-action-sheet
- @react-native-community/async-storage
- @react-native-community/datetimepicker
- @react-navigation/bottom-tabs
- @react-navigation/native
- @react-navigation/stack
- axios
- date-fns
- expo-image-picker
- react-native-modal
- yup
-
cd proffy-app
-
Instale as dependencias:
yarn install
-
Configure o expo, caso ainda não o tenha
-
Altere o
baseURL
para a url onde o servidor está rodando (./src/services/api.ts) -
Execute o projeto:
yarn android
![](https://private-user-images.githubusercontent.com/48543208/242285825-857b0dcd-fff0-4656-94ae-a0bbbec04959.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMTEyODcsIm5iZiI6MTczOTMxMDk4NywicGF0aCI6Ii80ODU0MzIwOC8yNDIyODU4MjUtODU3YjBkY2QtZmZmMC00NjU2LTk0YWUtYTBiYmJlYzA0OTU5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDIxNTYyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTY0Y2RhNmIwNGIxMWIyYmZhODVhN2Q5ZTkwZWYyOGY2YmJhMjliMmY0ZGMxNzg1YjliMmFiZTNhMTFmYWVjNmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.vUlFCcEFy-5VMaHe-yHD97EOx_xHfC5y1hpOnXGL4GU)
![](https://private-user-images.githubusercontent.com/48543208/242285840-722ba77b-f540-4c13-99f4-5e1f19fb9de6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMTEyODcsIm5iZiI6MTczOTMxMDk4NywicGF0aCI6Ii80ODU0MzIwOC8yNDIyODU4NDAtNzIyYmE3N2ItZjU0MC00YzEzLTk5ZjQtNWUxZjE5ZmI5ZGU2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDIxNTYyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZhMTZkZjRiYjMwMjZhMzkzMjRlODQxY2VlZThjMTk1Y2VjNjQ1YjU4MDk0NTIxYzZiMzljZWNhNTMxNmU3MWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.BtB4ybZWSfTOdEg6IjtA7zP4mL24XknXj-st-ZEpyME)
![](https://private-user-images.githubusercontent.com/48543208/242286838-ea06b015-d43c-44ee-8f6f-bcf79bff5635.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMTEyODcsIm5iZiI6MTczOTMxMDk4NywicGF0aCI6Ii80ODU0MzIwOC8yNDIyODY4MzgtZWEwNmIwMTUtZDQzYy00NGVlLThmNmYtYmNmNzliZmY1NjM1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDIxNTYyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWNjOGY2YTFlMTcxNWZmNTVkMmVhYTJmNjNiNWI3MTFkZTA4NmYzZWVmMjIwY2IxODJkMWIwMGFmMzM0NjY5ODgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Wm7yu2XAM7bl0Z5W7nlkdVV83m28d7lAxJ1Vu7jrUl4)
![](https://private-user-images.githubusercontent.com/48543208/242286854-37623ac9-9ca6-42c8-9238-16d1967eee56.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMTEyODcsIm5iZiI6MTczOTMxMDk4NywicGF0aCI6Ii80ODU0MzIwOC8yNDIyODY4NTQtMzc2MjNhYzktOWNhNi00MmM4LTkyMzgtMTZkMTk2N2VlZTU2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjExVDIxNTYyN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk5ZjNmZmM4ZDA4NGE1M2JmYzVlZmQ2OWIzY2QzNzkwZGUzNGY0OWE2MGVjNzdlZTgxNGIxMDg1Njg3NmY1YTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.0_NvS-RiyVZQkZ-SSpDLtiFdFc5nGbO7022SGefv4Lw)