Baixe o app para aproveitar ainda mais
Prévia do material em texto
D E S TA Q U E G I T H U B S TA R T E R B O O S T E R Como fazer um bom README por há 3 meses 1 1 M I N D E L E I T U R AThiago Marinho https://blog.rocketseat.com.br/ https://blog.rocketseat.com.br/tag/github/ https://blog.rocketseat.com.br/tag/starter/ https://blog.rocketseat.com.br/tag/booster/ https://blog.rocketseat.com.br/author/thiago-marinho/ Guia Rocketseat para um README de qualidade Se você não leu o post O que é README recomendo que leia, se já sabe da importância desse arquivo no projeto, pode continuar por aqui. Vamos aprender como estruturar um bom README. No final vou deixar um template baseado no que vamos aprender e indicar referências interessantes que encontrei sobre o assunto. Separei em duas categorias: opcional e obrigatório. Na descrição de cada item vou especificar em qual categoria ele se encaixa. Confere aí. Estrutura do README Logo ou Banner Título e Descrição Badges Status do Projeto Tabela de Conteúdos Features Demonstração da Aplicação Pré-requisitos e como rodar a aplicação/testes https://blog.rocketseat.com.br/o-que-e-readme-e-porque-e-tao-importante/ https://blog.rocketseat.com.br/como-fazer-um-bom-readme#-badges https://blog.rocketseat.com.br/p/5608d76b-59ca-44eb-be06-18566f319efb/#-status-do-projeto Tecnologias utilizadas Contribuição Autor Licença Essa é uma sugestão de estrutura, cada um pode fazer conforme a necessidade do projeto. Vamos agora cobrir cada um dos tópicos da estrutura e outros pontos adicionais. ✅ Logo ou Banner Status: Opcional Se seu projeto já tem uma logo adicione no README. Pode ser um banner também. Você pode criar uma logo ou banner usando o Canva. A logo ou banner podem substituir o título, mas não a descrição do projeto, veja um exemplo. O bom de manter o título e descrição em texto é que ajuda no SEO do Github, o Google vai ajudar indexar melhor seu projeto nas primeiras páginas de pesquisas, além de dar um resumo sobre o seu projeto. Exemplos de projetos com logo e banner. ✅ Título e Descrição Status: Obrigatório Título: Nome curto do projeto https://blog.rocketseat.com.br/como-fazer-um-bom-readmeb/#-tecnologias-utilizadas https://blog.rocketseat.com.br/como-fazer-um-bom-readme#-autor https://github.com/Rocketseat/unform https://github.com/tgmarinho/meetapp https://www.canva.com/pt_br/criar/logotipo/ https://github.com/Rocketseat/unform https://github.com/Rocketseat/unform https://github.com/tgmarinho/ecoleta Descrição: Uma breve descrição do objetivo do projeto. # Nome do Projeto ou <h1 align="center">Nome do Projeto</h1> Nome do Projeto Com a descrição: ## Descrição do Projeto <p align="center">Escrever uma breve descrição</p> Escrever uma breve descrição 🔗 React 🚀 lib para construir interfaces do usuário com componentes reutilizáveis ✅ Badges Status: Opcional <h1 align="center"> <a href="https://pt-br.reactjs.org/">🔗 React</a> </h1> <p align="center">🚀 lib para construir interfaces do usuá https://pt-br.reactjs.org/ É uma questão de gosto pessoal e comunicação. As badges são úteis para indicar o status do projeto: você pode colocar a versão dele, link para licença, quantidade de issues, status da build, status dos testes. Vale muito a pena colocar. As badges podem ficar no topo antes do título ou abaixo da descrição. Use o site shields.io para gerar suas badges. Você pode criar a sua própria badge: Os ícones de várias logos de produtos e tecnologias você encontra aqui: simpleicons.org. Podemos customizar partir da URL a abaixo: Os parâmetros significam: LABEL: texto do campo esquerdo MESSAGE: texto do campo direto COLOR: cor do campo direito, pode usar RGB. STYLE: estilo do badge inteiro. Podemos ter: plastic, flat, for-the-badge, social ou flat-square. Teste cada uma delas. LOGO: logo do campo esquerdo https://img.shields.io/static/v1?label=<LABEL>&message=<MES http://shields.io/ https://simpleicons.org/ Como exemplo, vou escolher os seguintes parâmetros: LABEL: como Blog MESSAGE: como Rocketseat COLOR: 7159c1 STYLE: como for-the-badge LOGO: como GHOST Podemos colocar ele no README assim em HTML: ou ainda em Markdown: Pronto. Veja como ficou o badge personalizado: BLOG ROCKETSEAT Legal que no site shields.io tem o input search / project URL que você cola o link do projeto do seu Github e ele sugere alguns badges. <img src="https://img.shields.io/static/v1?label=Blog&messa ![Badge](https://img.shields.io/badge/Blog-Rocketseat-%2371 https://img.shields.io/badge/Blog-Rocketseat-%237159c1?style=for-the-badge&logo=ghost http://shields.io/ Tem esse repositório com algumas badges prontas: Naereen/badges ✅ Tabela de Conteúdos Status: Obrigatório É ótimo colocar os índices de conteúdos, que é tabela onde a pessoa clica e vai para o tópico específico. Exemplo com markdown: Tabela de conteúdos ================= <!--ts--> * [Sobre](#Sobre) * [Tabela de Conteudo](#tabela-de-conteudo) * [Instalação](#instalacao) * [Como usar](#como-usar) * [Pre Requisitos](#pre-requisitos) * [Local files](#local-files) * [Remote files](#remote-files) * [Multiple files](#multiple-files) * [Combo](#combo) * [Tests](#testes) * [Tecnologias](#tecnologias) <!--te--> https://github.com/Naereen/badges https://github.com/ekalinin/github-markdown-toc#table-of-contents https://github.com/ekalinin/github-markdown-toc#table-of-contents Resultado: Tabela de conteúdos Sobre Tabela de Conteudo Instalação Como usar Pre Requisitos Local files Remote files Multiple files Combo Tests Tecnologias Se o README tiver poucos tópicos pode fazer inline, com HTML: <p align="center"> <a href="#objetivo">Objetivo</a> • <a href="#roadmap">Roadmap</a> • <a href="#tecnologias">Tecnologias</a> • <a href="#contribuicao">Contribuição</a> • <a href="#licenc-a">Licença</a> • <a href="#autor">Autor</a> </p> https://github.com/animavita/animavita https://github.com/ekalinin/github-markdown-toc#table-of-contents https://github.com/animavita/animavita https://github.com/animavita/animavita Resultado: Objetivo • Roadmap • Tecnologias • Contribuição • Licença • Autor No README.md do Github você pode usar HTML o que ajuda muito. 👌 ✅ Status do Projeto Status: Obrigatório Indica se o projeto está em desenvolvimento ou já foi concluído. <h4 align="center"> 🚧 React Select 🚀 Em construção... 🚧 </h4> Resultado: 🚧 React Select 🚀 Em construção... 🚧 ✅ Features Status: Opcional Você pode listar as funcionalidades da aplicação. É opcional, porém é muito importante colocar. Isso ajuda demais as pessoas entenderem o que já tem feito, se estiver em construção você vai checkando o que está pronto. https://rocketseat.com.br/starter/curso-gratuito-reactjs Exemplo: ### Features - [x] Cadastro de usuário - [x] Cadastro de cliente - [ ] Cadastro de produtos No Github ou gist fica com essa aparência abaixo. Resultado: ✅ Demonstração da aplicação Status: Opcional Se for um projeto web e estiver hospedado em algum lugar, forneça o link. Se o deploy foi feito no Netlify tem um badge para isso. Se for uma API backend pode customizar um badge com um ícone do heroku. Pode também colocar o arquivo do Insomnia para ficar mais rápido para o usuário testar a API — Fica muito bom. Se a aplicação estiver em desenvolvimento, se for um app mobile ou website coloque os prints da tela ou um gif https://www.netlify.com/ https://docs.netlify.com/monitor-sites/status-badges/ https://simpleicons.org/?q=heroku https://insomnia.rest/download/ https://github.com/tgmarinho/meetapp-api#how-to-install ilustrando a utilização. Exemplos de como usar imagens e gifs no README: animavita/animavita Trigger life-saving alerts, register animals for adoption and find the closest pet friend to ado… animavita • GitHub tgmarinho/meetapp Final Challenge of Rocketseat Bootcamp | Meetapp Backend, Frontend and Mobile -… tgmarinho • GitHub lukemorales/rocketshoes-react-native NetShoes Clone with React Native and Redux. Contribute to lukemorales/rocketshoes-react-… lukemorales • GitHub A maneira mais segura de manter os arquivos é criar uma pasta screenshots, github, assets, resources ou nome que você quiser e deixar os arquivos nela. Se você usar um CDN de imagens ou gif pode funcionar mas corre o risco do quebrar o link algum dia. Supondo que você tenha criado uma pasta assets no seu projeto e tem o arquivo banner.png, é assim que você pode adicionar a imagem: https://github.com/animavita/animavita https://github.com/tgmarinho/meetapp https://github.com/lukemorales/rocketshoes-react-native Resultado: Exemplo de como adicionar um banner com markdown: Nesse caso estou usando algo genérico, usando uma imagem minha do banner do meu perfil no Twitter. Outra maneira: * SignUp Mobile ![SignUp Mobile](screenshots/signup-mobile.png) <h1 align="center"> <img alt="NextLevelWeek" title="#NextLevelWeek" src="./as </h1> ![Thiago Marinho](https://pbs.twimg.com/profile_banners/417 https://github.com/tgmarinho/meetapp Eu prefiro usar as tags HTML porque permitem customizar melhor, centralizar e diminuir a imagem. Se quiser arriscar com algum serviço de hospedagem tem essa opção: imgur.com, se for um gif pode usar esse aqui giphy.com. ✅ Pré-requisitos e como rodar a aplicação/testes Status: Obrigatório Se o projeto for uma lib, você tem que mostrar os passos de como instalar e usar a lib, se for um projeto backend | web | mobile | desktop descreva os passos de como fazer para rodar na máquina. Se tiver testes é bom descrever como rodar os testes. Exemplo: ### Pré-requisitos Antes de começar, você vai precisar ter instalado em sua má [Git](https://git-scm.com), [Node.js](https://nodejs.org/en Além disto é bom ter um editor para trabalhar com o código ### 🎲 Rodando o Back End (servidor) ```bash # Clone este repositório $ git clone <https://github.com/tgmarinho/nlw1> https://imgur.com/ https://giphy.com/ ✨ Resultado: Pré-requisitos Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas: Git, Node.js. Além disto é bom ter um editor para trabalhar com o código como VSCode 🎲 Rodando o Back End (servidor) # Acesse a pasta do projeto no terminal/cmd $ cd nlw1 # Vá para a pasta server $ cd server # Instale as dependências $ npm install # Execute a aplicação em modo de desenvolvimento $ npm run dev:server # O servidor inciará na porta:3333 - acesse <http://localho ``` # Clone este repositório $ git clone <https://github.com/tgmarinho/nlw1> # Acesse a pasta do projeto no terminal/cmd $ cd nlw1 https://git-scm.com/ https://nodejs.org/en/ https://code.visualstudio.com/ ✅ Tecnologias utilizadas Status: Obrigatório para projetos de portfólio/estudos. Listar as tecnologias e colocar os links para o seus respectivos sites é um plus no README. Resultado: 🛠 Tecnologias # Vá para a pasta server $ cd server # Instale as dependências $ npm install # Execute a aplicação em modo de desenvolvimento $ npm run dev:server # O servidor inciará na porta:3333 - acesse <http://localho ### 🛠 Tecnologias As seguintes ferramentas foram usadas na construção do proj - [Expo](https://expo.io/) - [Node.js](https://nodejs.org/en/) - [React](https://pt-br.reactjs.org/) - [React Native](https://reactnative.dev/) - [TypeScript](https://www.typescriptlang.org/) As seguintes ferramentas foram usadas na construção do projeto: Expo Node.js React React Native TypeScript ✅ Contribuição Status: Opcional Se seu projeto começar a receber contribuições, uma maneira legal de reconhecer o trabalho dessas pessoas é adicionando na lista de contribuidores. Com certeza eles contribuíram porque gostam do projeto, e vão amar ♥ receber esse esse reconhecimento. Segue um modelo bem legal: https://expo.io/ https://nodejs.org/en/ https://pt-br.reactjs.org/ https://reactnative.dev/ https://www.typescriptlang.org/ https://github.com/testing-library/react-testing-library#contributors Eles utilizaram um bot pra criar essa lista: https://allcontributors.org/docs/en/bot/overview Mas se não usar algo complexo, pode fazer simples: Link para exemplo. Resultado: É bom colocar o arquivo CONTRIBUTING.md na raiz do projeto para os devs saberem os passos de como contribuir no projeto. ✅ Autor Status: Obrigatório Aqui entra seu jabá, interessante colocar seus contatos, redes sociais para as pessoas te encontrarem e começar um networking: Link com o template de exemplo. https://allcontributors.org/docs/en/bot/overview https://gist.github.com/tgmarinho/cf06835c639e342d71684d01a94ba006 https://github.com/Rocketseat/unform/blob/master/.github/CONTRIBUTING.md https://blog.rocketseat.com.br/5-dicas-para-uma-carreira-solida-como-programador-a/ https://gist.github.com/tgmarinho/931ce1ad6de9c24c7f3b6d7848de9fbd Resultado: ✅ Licença Status: Obrigatório Precisa definir a licença do seu projeto. Se você não souber definir, leia isso e isto. A maioria dos devs utilizam a licença MIT que permite as pessoas baixarem o projeto e modificar e você não será responsabilizado por nada. Muito simples escolher uma licença, o github te ajuda com isso te dando um template. Geralmente você cria um arquivo LICENSE. Exemplo: MIT License Copyright (c) <2020> <Seu Nome> Permission is hereby granted, free of charge, to any person http://escolhaumalicenca.com.br/ https://docs.github.com/pt/github/creating-cloning-and-archiving-repositories/licensing-a-repository https://docs.github.com/pt/github/building-a-strong-community/adding-a-license-to-a-repository https://docs.github.com/pt/github/building-a-strong-community/adding-a-license-to-a-repository E se quiser pode usar o Badge também: Crie usando esse link. licenselicense MITMIT ✅ Emojis Status: Opcional Vamos falar ainda sobre Emojis que estão bem na moda. Tem gente que não gosta, mas eles dão emoção ao texto e deixam o visual mais caprichado, porém não pode exagerar. Fica legal colocar nos tópicos ou nas listas. Exemplo: 🏁 Tópicos of this software and associated documentation files (the "S in the Software without restriction, including without limi to use, copy, modify, merge, publish, distribute, sublicens copies of the Software, and to permit persons to whom the S furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY K IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MER FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAG LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERW OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTH SOFTWARE. https://shields.io/category/license 👉 Descrição do projeto 👉 Funcionalidades 👉 Deploy da Aplicação 👉 Pré-requisitos 👉 Como rodar a aplicação Você pode pegar os emojis aqui ou aqui. ⚒ Ferramentas: Sites que dão dicas e inclusive um code/preview do README para seu projeto: https://www.makeareadme.com/#mind-reading https://stackedit.io/app https://dillinger.io/ Conclusão Escrever o README português ou inglês? Depende do objetivo do projeto, se for um portfólio e você está procurando emprego na gringa, tem que ser em inglês. Se for uma uma lib que pode ser usada por todo mundo, é interessante escrever em inglês, sua ferramenta vai ter mais alcance e relevância. Se estiver começando no mundo da programação e não sabe inglês, faça em português mesmo, esse é o seu momento, mas estude inglês. https://gist.github.com/tgmarinho/6cf35ac45644a0b68a45069d23c2e4b6 https://www.emojicopy.com/ https://www.makeareadme.com/#mind-reading https://stackedit.io/app https://dillinger.io/ Dá para escrever em outros idiomas também, mas ai você pode pedir colaboração para isso, claro! Pode terum README-en.md, ou seja internacionalizar o README e fornecer os links no README principal. Se o projeto for algum portfólio para mostrar para alguma empresa aqui no Brasil pode ser em português mesmo. Depende do foco, momento e objetivo do projeto. 🎁 Template Utilize esse template que preparamos para você construir o seu README. 💝 Em português e com banner 🇧🇷 Em português sem logo 🇧🇷 Em inglês sem emojis 🇺🇸 Para copiar a estrutura do README você tem que clicar no arquivo README.md e depois clicar na opção RAW, selecionar tudo, copiar e colar no seu editor preferido que suporte HTML e Markdown. 🔗 Links de README inspiradores: https://github.com/ant-design/ant-design https://github.com/animavita/animavita https://github.com/iterative/cml http://readme-en.md/ https://github.com/tgmarinho/README-ecoleta https://github.com/tgmarinho/README-ecoleta/blob/master/README.md https://github.com/tgmarinho/README-ecoleta/blob/master/README-sem-logo.md https://github.com/tgmarinho/README-ecoleta/blob/master/README-en.md https://github.com/tgmarinho/README-ecoleta https://github.com/ant-design/ant-design https://github.com/animavita/animavita https://github.com/iterative/cml https://github.com/danileao/rocketmusic https://github.com/gatsbyjs/gatsby https://github.com/x0n4d0/ecoleta https://github.com/tgmarinho/meetapp https://github.com/steniowagner/mindCast https://github.com/fastify/fastify https://github.com/invertase/react-native-firebase https://github.com/JedWatson/react-select https://github.com/fkhadra/react-toastify https://github.com/facebook/react-native https://github.com/tgmarinho/Ecoleta https://github.com/othneildrew/Best-README-Template ➕ Mais sobre o assunto e outros aspectos interessantes: https://dev.to/scottydocs/how-to-write-a-kickass- readme-5af9#template https://dev.to/reginadiana/como-escrever-um-readme- md-sensacional-no-github-4509#estrutura-do-readme https://medium.com/@raullesteves/github-como-fazer- um-readme-md-bonit%C3%A3o-c85c8f154f8 https://github.com/RichardLitt/standard- readme/blob/master/spec.md https://github.com/TautvydasDerzinskas/sass-ultimate- boilerplate https://tom.preston-werner.com/2010/08/23/readme- driven-development.html https://changelog.com/posts/top-ten-reasons-why-i- wont-use-your-open-source-project https://github.com/danileao/rocketmusic https://github.com/gatsbyjs/gatsby https://github.com/x0n4d0/ecoleta https://github.com/tgmarinho/meetapp https://github.com/steniowagner/mindCast https://github.com/fastify/fastify https://github.com/invertase/react-native-firebase https://github.com/JedWatson/react-select https://github.com/fkhadra/react-toastify https://github.com/facebook/react-native https://github.com/tgmarinho/Ecoleta https://github.com/othneildrew/Best-README-Template https://dev.to/scottydocs/how-to-write-a-kickass-readme-5af9#template https://dev.to/reginadiana/como-escrever-um-readme-md-sensacional-no-github-4509#estrutura-do-readme https://medium.com/@raullesteves/github-como-fazer-um-readme-md-bonit%C3%A3o-c85c8f154f8 https://github.com/RichardLitt/standard-readme/blob/master/spec.md https://github.com/TautvydasDerzinskas/sass-ultimate-boilerplate https://tom.preston-werner.com/2010/08/23/readme-driven-development.html https://changelog.com/posts/top-ten-reasons-why-i-wont-use-your-open-source-project https://www.freecodecamp.org/news/what-i-learned- from-an-old-github-project-that-won-3-000-stars-in-a- week-628349a5ee14/ https://github.com/noffle/art-of- readme/blob/master/README-pt-BR.md https://github.com/matiassingers/awesome-readme https://developers.google.com/tech-writing https://github.com/matiassingers/awesome-readme https://blog.rocketseat.com.br/o-que-e-readme-e- porque-e-tao-importante/ Posta aí nos comentários o seu README bonitão :) Espero que tenha curtido! 💜 O aprendizado é contínuo e sempre haverá um próximo nível! READ MORE POSTS BY THIS AUTHOR https://www.freecodecamp.org/news/what-i-learned-from-an-old-github-project-that-won-3-000-stars-in-a-week-628349a5ee14/ https://github.com/noffle/art-of-readme/blob/master/README-pt-BR.md https://github.com/matiassingers/awesome-readme https://developers.google.com/tech-writing https://github.com/matiassingers/awesome-readme https://blog.rocketseat.com.br/o-que-e-readme-e-porque-e-tao-importante/ https://giphy.com/gifs/reading-dot-strategies-NFA61GS9qKZ68?utm_source=iframe&utm_medium=embed&utm_campaign=Embeds&utm_term=https%3A%2F%2Fblog.rocketseat.com.br%2Fcomo-fazer-um-bom-readme%2F https://giphy.com/gifs/reading-dot-strategies-NFA61GS9qKZ68?utm_source=iframe&utm_medium=embed&utm_campaign=Embeds&utm_term=https%3A%2F%2Fblog.rocketseat.com.br%2Fcomo-fazer-um-bom-readme%2F https://blog.rocketseat.com.br/author/thiago-marinho/ P R Ó X I M O P O S T Melhores sites para baixar imagens gratuitas e outros recursos P O S T A N T E R I O R O que é README e porque é tão importante Thiago Marinho Dev Apaixonado por Tecnologia & Educação! Evolua rápido como a tecnologia, aprendizado é contínuo e sempre haverá um próximo nível. Boost Yourself e conte conosco! 🚀 � � https://blog.rocketseat.com.br/melhores-sites-para-baixar-imagens-gratuitas-e-outros-recursos/ https://blog.rocketseat.com.br/o-que-e-readme-e-porque-e-tao-importante/ https://blog.rocketseat.com.br/author/thiago-marinho/ https://blog.rocketseat.com.br/author/thiago-marinho/ https://twitter.com/intent/tweet?text=Como%20fazer%20um%20bom%20README&url=https://blog.rocketseat.com.br/como-fazer-um-bom-readme/ https://www.facebook.com/sharer/sharer.php?u=https://blog.rocketseat.com.br/como-fazer-um-bom-readme/ Deixe sua reação... 5 Responses Gostei! Amei! Uau! Não gostei! Comentários Comunidade 🔒 Política de Privacidade Entrar1 t Tweet f Compartilhar Ordenar por Mais votados FAZER LOGIN COM OU REGISTRE-SE NO DISQUS Nome Participe da discussão... ? Daniel Vinícius • um mês atrás • Responder • Eu fiz este https://github.com/Daniel-V.... Ótimo artigo! Se puder dá uma olhada depois, fiquei com dificuldade pra criar badges △ ▽ Thiago Marinho • um mês atrás • Responder • Rocketseat > Daniel Vinícius Daniel, está legal seu README, qual foi a dificuldade para criar o badges? Acho melhor deixar um badge do lado do outro, veja como fazer: https://raw.githubuserconte... △ ▽ Recomendar 6 Compartilhar › Compartilhar › https://disqus.com/home/forums/blog-rocketseat/ https://help.disqus.com/customer/portal/articles/466259-privacy-policy https://disqus.com/home/inbox/ https://disqus.com/by/disqus_Mo2sKSpQC6/ https://blog.rocketseat.com.br/como-fazer-um-bom-readme/#comment-5067707340 https://disq.us/url?url=https%3A%2F%2Fgithub.com%2FDaniel-Vinicius%2FWebepack%3AnVtVs6WRPkClvRvMs9_FCke2DqE&cuid=5446181 https://disqus.com/by/tgmarinho/ https://blog.rocketseat.com.br/como-fazer-um-bom-readme/#comment-5070132261 https://blog.rocketseat.com.br/como-fazer-um-bom-readme/#comment-5067707340 https://disq.us/url?url=https%3A%2F%2Fraw.githubusercontent.com%2Ftgmarinho%2FEcoleta%2Fmaster%2FREADME.md%3A2756pWT_n1DOBbSR_VcaBD7OEV8&cuid=5446181 https://disqus.com/by/disqus_Mo2sKSpQC6/ https://disqus.com/by/tgmarinho/ © 2020 Blog da Rocketseat. Feito com <3. Published with Ghost. HOME BACK END FRONT END MOBILE https://blog.rocketseat.com.br/ https://www.facebook.com/rocketseat https://twitter.com/rocketseat https://blog.rocketseat.com.br/ https://ghost.org/ https://blog.rocketseat.com.br/ https://blog.rocketseat.com.br/tag/nodejs/ https://blog.rocketseat.com.br/tag/reactjs/ https://blog.rocketseat.com.br/tag/react-native/
Compartilhar