{"id":21424289,"url":"https://github.com/lucasbecker/happy","last_synced_at":"2026-04-12T01:34:59.771Z","repository":{"id":112622515,"uuid":"303460926","full_name":"lucasbecker/happy","owner":"lucasbecker","description":"Projeto desenvolvido durante a Next Level Week #3 da Rocketseat utilizando React, React Native, Expo e NodeJS.","archived":false,"fork":false,"pushed_at":"2020-10-16T21:34:31.000Z","size":1158,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-16T20:45:29.863Z","etag":null,"topics":["api-rest","expo","mobile","node","react","react-native","typescript","web"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lucasbecker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-12T17:12:47.000Z","updated_at":"2020-10-16T21:57:57.000Z","dependencies_parsed_at":"2023-06-09T19:45:29.951Z","dependency_job_id":null,"html_url":"https://github.com/lucasbecker/happy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lucasbecker/happy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasbecker%2Fhappy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasbecker%2Fhappy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasbecker%2Fhappy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasbecker%2Fhappy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lucasbecker","download_url":"https://codeload.github.com/lucasbecker/happy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasbecker%2Fhappy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266187240,"owners_count":23889943,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-rest","expo","mobile","node","react","react-native","typescript","web"],"created_at":"2024-11-22T21:20:45.897Z","updated_at":"2025-10-08T09:21:33.294Z","avatar_url":"https://github.com/lucasbecker.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cdiv\u003e\n    \u003cimg alt=\"Happy\" width=\"50%\" src=\"./.github/happy-logo.png\"/\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n\u003e Projeto desenvolvido durante a Next Level Week #3 da [Rocketseat](https://rocketseat.com.br/) utilizando React, React Native, Expo e NodeJS.\n\n## Overview\nO **Happy é uma aplicação que conecta pessoas à casas de acolhimento institucionais**, atualmente focado exclusivamente à casas lares para fazer o dia de diversas crianças mais feliz. O intuito é ampliar o alcance da aplicação à outras modalidades de abrigos institucionais, como casas lares para pessoas idosas e residências inclusivas, por exemplo.\n\nAtualmente a aplicação permite o **cadastramento das instituições** no banco de dados, assim como a **exibição das instituições cadastradas em um mapa** e as **informações detalhadas** de cada uma delas clicando em seu respectivo marcador no mapa. Sendo toda a utilização e navegação de forma fácil e intuitiva, através do uso de mapas na aplicação web e mobile.\n\n## Technologies\nO [TypeScript](https://www.typescriptlang.org/) é a linguagem de programação utilizada para o desenvolvimento de todo o projeto. Formalmente ela não é uma linguagem e sim um *superset* para o JavaScript que o torna mais robusto através de um conjunto de funcionalidades, sendo a principal a tipagem de variáveis. \n\n### Web\nA aplicação web do projeto é uma **SPA - Single Page Application**, ou seja, um aplicativo de página única que não recarrega a página durante toda a utilização para fornecer uma melhor experiência ao usuário. **Desenvolvida utilizando [React](https://reactjs.org)**, um framework para construção de interfaces que facilita o recebimento de dados do servidor e o desenvolvimento de SPAs. Foi inicializado com [create react app](https://github.com/facebook/create-react-app) e também foram utilizadas bibliotecas como o [react-router-dom](https://reactrouter.com/) para trabalhar com rotas da aplicação, [react-leaflet](https://react-leaflet.js.org/) para trabalhar com os mapas e o [axios](https://github.com/axios/axios) realizar a conexão com o servidor.\n\n\u003cdiv align=\"center\" \u003e\n  \u003cdiv\u003e\n    \u003cimg alt=\"Preview da aplicação web.\" width=\"100%\" src=\"./.github/happy-web-preview.png\"/\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n### Mobile\nA aplicação mobile, por sua vez, foi **desenvolvida utilizando o [React Native](https://facebook.github.io/react-native/)**, um framework que permite desenvolver aplicações mobile multiplataforma de forma flexível, produtiva, de fácil manutenção e reaproveitando conhecimentos. Também **utilizamos o [Expo](https://expo.io/)**, um framework que funciona como uma abstração para lidarmos com as funcionalidade nativas do dispositivo como, por exemplo, acesso a câmera e notificações. E outras bibliotecas, como o *axios* que já foi citado na aplicação web e o [react-navigation](https://reactnavigation.org/) para navegação entre as páginas da aplicação.\n\n\u003cdiv align=\"center\" \u003e\n  \u003cdiv\u003e\n    \u003cimg alt=\"Preview da aplicação mobile.\" width=\"100%\" src=\"./.github/happy-mobile-preview.png\"/\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n### Server\nO back-end do projeto foi **desenvolvido utilizando [Node.js](https://nodejs.org/en/) com [Express](https://expressjs.com/pt-br/)**, uma biblioteca minimalista e robusta para trabalhar com rotas e desenvolver APIs. Assim, foi desenvolvido uma **API REST** com as seguintes funcionalidades:\n\n- [X] Cadastramento de instituições\n- [X] Listagem de instituições\n- [X] Dados da instituição\n\nO **banco de dados utilizado foi o SQLite3**, um banco de dados \"embutido\" que não utiliza SGBD separado para sua execução e possui recursos completos de um banco de dados, além de ser pequeno, rápido e de alta confiabilidade. E para trabalhar com o banco de dados foi utilizado a biblioteca [TypeORM](https://typeorm.io/) que é um ORM - Object Relationa Mapping, ou seja, é o maior nível de abstração para realizar *querys SQL* utilizando classes do JavaScript, o que torna possível migrar para diversos banco de dados sem alteração no código.\n\nOutras ferramentas também foram utilizadas, como o [multer](https://github.com/expressjs/multer) para fazer o *upload* de arquivos, o [yup](https://github.com/jquense/yup) para fazer a validação dos dados de entrada no servidor e o [cors](http://expressjs.com/en/resources/middleware/cors.html) para o servidor ser acessível por outras aplicações de diferentes endereços, como a aplicação web e mobile.\n\n## Setup\nPrimeiramente faça o download ou clonagem deste repositório e com o [Node.js](https://nodejs.org/en/) instalado execute o comando `npm install` no diretório `web`, `mobile` e `server` para realizar o download das dependências necessárias.\n\n### Migrations\nNo diretório `server` execute os seguintes comando para executar ou reverter uma migração, respectivamente:\n```sh\nnpm run typeorm migration:run\nnpm run typeorm migration:revert\n```\n### Run\nPara executar as aplicações, primeiramente, inicialize o servidor digite no diretório `server` o comando:\n```sh\nnpm run dev\n```\n\nPara executar a aplicação `web` e a aplicação `mobile`, digite nos diretórios respectivos o comando:\n```sh\nnpm start\n```\nO servidor executará em `localhost:3333`, a aplicação web em `localhost:3000` e a aplicação mobile  em `localhost:19002`. Para abrir a aplicação mobile em seu próprio dispositivo físico ou em algum emulador é preciso ter o aplicativo Expo instalado.\n\nSempre conferir e alterar o IP, caso necessário, das URLs em `server/src/images_view.ts` e `mobile/src/services/api.ts`.\n\n## [Next Steps](https://www.notion.so/Vers-o-2-0-do-Happy-7c123c82172c47f89a7083f4f78c285a)\n\nDesafios para elevar o nível da aplicação implementando novas funcionalidades.\n\n- [ ] Acesso restrito\n- [ ] Recuperação de senhas\n- [ ] Cadastro de instituições\n- [ ] Splash Screen no React Native com Expo\n- [ ] Onboarding do usuário\n- [ ] Localização real do usuário\n- [ ] Cadastro em múltiplas etapas\n- [ ] Logout da aplicação\n- [ ] Deploy da aplicação\n\n## License \nEsse projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE.md) para mais detalhes.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucasbecker%2Fhappy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flucasbecker%2Fhappy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucasbecker%2Fhappy/lists"}