<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Thiago Novato</title>
    <description>The latest articles on DEV Community by Thiago Novato (@thiagonovato).</description>
    <link>https://dev.to/thiagonovato</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F339079%2Ff67ddd03-7b49-4b55-a7a4-01d9041fc634.jpeg</url>
      <title>DEV Community: Thiago Novato</title>
      <link>https://dev.to/thiagonovato</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thiagonovato"/>
    <language>en</language>
    <item>
      <title>Kahoot - Uma ferramenta de interatividade</title>
      <dc:creator>Thiago Novato</dc:creator>
      <pubDate>Thu, 01 Jul 2021 14:17:18 +0000</pubDate>
      <link>https://dev.to/thiagonovato/kahoot-uma-ferramenta-de-interatividade-25j</link>
      <guid>https://dev.to/thiagonovato/kahoot-uma-ferramenta-de-interatividade-25j</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6oezf3wD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/47j4yk0ymr78r2kiol8e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6oezf3wD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/47j4yk0ymr78r2kiol8e.png" alt="Kahoot!"&gt;&lt;/a&gt;&lt;br&gt;
Fala Dev! Tudo beleza? Então, hoje venho apresentar para vocês um site que oferece um serviço incrível! A interatividade com pessoas! E estas pessoas podem ser sua família, seu time do trabalho, seus amigos, colegas de sala, até os parceiros de bar, clube da Luluzinha etc! É muito legal!&lt;/p&gt;

&lt;p&gt;São vários exemplos que podemos usar e vou tentar retratar alguns aqui:&lt;/p&gt;

&lt;p&gt;Imagine que trabalha em uma squad de uma empresa e você queira fazer uma dinâmica com todos do time para engajar as pessoas, testar conhecimento ou até mesmo implemetar alguma tática Agilista com perguntas do tipo "Essa sprint foi boa", "Essa sprint foi ruim", "Qual foi o problema dessa sprint". O &lt;strong&gt;Kahoot!&lt;/strong&gt; faz iso de uma forma incrível, através do site totalmente dinâmico.&lt;/p&gt;

&lt;p&gt;Neste exemplo, o Agilista cadastra todas as perguntas no painel e seleciona o tipo da pergunta (pode ser quiz, true/false, quiz, quadro aberto etc).&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j6obNZlI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nc6iwcjzn1tzeraen6mo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j6obNZlI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nc6iwcjzn1tzeraen6mo.png" alt="Tela com pin"&gt;&lt;/a&gt;&lt;br&gt;
Log em seguida, ao dar start no jogo, cada participante também entra no mesmo site e entra jogo informando o código PIN (que é gerado ao dar start no jogo)&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UkfvF3lu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qsip5p57zhyic1ghn2h4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UkfvF3lu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qsip5p57zhyic1ghn2h4.png" alt="Tela user"&gt;&lt;/a&gt;&lt;br&gt;
Quando um usuário entra, seu nome aparece na tela para todos.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dL3poFW1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ebbdykrj0j9k6o45lwa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dL3poFW1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ebbdykrj0j9k6o45lwa.png" alt="Tela nome"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Que comece o jogo!
&lt;/h3&gt;

&lt;p&gt;Ao dar start, as perguntas são lançadas na tela principal, onde o participante deverá pressionar no botão correspondente à resposta correta.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xcUzPtRS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eulb1n7wbh8apag2aa49.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xcUzPtRS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eulb1n7wbh8apag2aa49.png" alt="Pergunta"&gt;&lt;/a&gt;&lt;br&gt;
Se ele responde corretamente, ele ganha ponto!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PbLsXubo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mp51p2pxbbdpfyrnkyzo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PbLsXubo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mp51p2pxbbdpfyrnkyzo.png" alt="Ganhou!"&gt;&lt;/a&gt;&lt;br&gt;
E aí a dinâmica acontece! É um jogo envolvente, que instiga a competividade colaborativa de uma forma muito divertida! O som ambiente é muito legal também!&lt;/p&gt;

&lt;p&gt;Dei o exemplo em uma squad em time de desenvolvimento, mas imagine agora usar como "Jogo da Verdade", amplamente jogado pelos adolescentes dos anos 90/2000? Neste momento de pandemia com isolamento social, esta ferramenta pode ser bastante útil para conectar pessoas! Pense por exemplo um jogo do "copo cheio" entre os amigos de bar, ou reunião de final de ano com família e parentes com pergunta do tipo "Quem come mais na família?" ou "Quem é o mais velho, Fulano ou Ciclano?".&lt;/p&gt;

&lt;p&gt;Agora, caso não queira criar para usar em seu ambiente, o &lt;strong&gt;Kahoot!&lt;/strong&gt; também permite que você entre em jogos que já estão em andamento. Muito bom quando você está sozinho e quer se divertir um pouco. Na Sessão Discovery é possível fazer buscas por categorias e simplesmente entrar e começar a jogar. Há várias categorias, como o famoso jogo Trívia, Social, Disney, ciênia e tecnologia, filmes, músicas entre outros diversos temas.&lt;/p&gt;

&lt;p&gt;Acesse aqui &lt;a href="http://kahoot.it"&gt;o site Kahoot!&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>3 aplicativos que todo Dev deve conhecer (parte 1)</title>
      <dc:creator>Thiago Novato</dc:creator>
      <pubDate>Mon, 28 Jun 2021 12:53:05 +0000</pubDate>
      <link>https://dev.to/thiagonovato/3-aplicativos-que-todo-dev-deve-conhecer-parte-1-10a4</link>
      <guid>https://dev.to/thiagonovato/3-aplicativos-que-todo-dev-deve-conhecer-parte-1-10a4</guid>
      <description>&lt;p&gt;Fala Dev, beleza? Sabemos que existem dezenas de aplicativos que auxiliam a produtividade do desenvolvedor. Já tive a oportunidade de experimentar dezenas delas, mas neste post vou trazer algumas principais que me ajudaram bastante em meus projetos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Insomnia / Postman
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fedpsvkqoulhu7a26obgz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fedpsvkqoulhu7a26obgz.png" alt="Insomnia"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyn25735obi740mitwqr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyn25735obi740mitwqr.png" alt="Postman"&gt;&lt;/a&gt;&lt;br&gt;
Se você ainda não trabalhou com APIs, muito provavelmente uma dia irá, pois é a principal forma de comunicação entre backend e frontend/mobile e integração com sistemas terceiros. Claro, existe também os microsserviços, mas vamos deixar isso para outro post.&lt;/p&gt;

&lt;p&gt;Vamos supor que você esteja desenvolvendo uma API REST para sua aplicação, você pode usar Javascript com Node puro (express), algum framework como AdonisJS/NestJS, ou até mesmo em outras linguagens tão famosas (C#, Python etc). Independente da linguagem ou framework que você usar, é importante ter uma ferramenta que permita você testar de forma rápida e intuitiva. O &lt;strong&gt;Insomnia&lt;/strong&gt; e &lt;strong&gt;Postman&lt;/strong&gt; sem dúvidas vão te ajudar nisso.&lt;/p&gt;

&lt;p&gt;Em ambos, é possível criar Workspaces, que é uma forma de organizar seu ambiente, dividindo todo o seu conteúdo por empresa, cliente ou projeto. &lt;/p&gt;

&lt;p&gt;Uma coisa que gosto bastante de ambos é que, baseado no Endpoint que você está construindo, eles te dão exemplo de código (baseado na sua linguagem de programação) para usar na sua aplicação.&lt;/p&gt;
&lt;h4&gt;
  
  
  Insomnia
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1n7h6i4utiyqps6ckae.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1n7h6i4utiyqps6ckae.png" alt="Insomnia"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Postman
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fppvdj7hu8hfjwdapj1zk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fppvdj7hu8hfjwdapj1zk.png" alt="Postman"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mais um ponto interessante é o suporte a multi-protocolos, sendo possível usar não somente REST, mas também SOAP, GraphQL e GRPC.&lt;/p&gt;

&lt;p&gt;Acesse &lt;a href="http://insomnia.rest" rel="noopener noreferrer"&gt;aqui o site do Insomnia&lt;/a&gt; e &lt;a href="http://postman.com" rel="noopener noreferrer"&gt;aqui o do Postman&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  DevDocs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzarpvvw1av6uhpzm4p9c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzarpvvw1av6uhpzm4p9c.png" alt="DevDocs"&gt;&lt;/a&gt;&lt;br&gt;
Vamos supor que você está ecrevendo um método em JavaScript onde deve-se iterar um array para achar um determinado valor. Alguns fariam da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const result = array.map(item =&amp;gt; {
   if (item === 'oQueProcura') {
      return item
   }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No exemplo acima, ele vai testar cada objeto do array, e se a condição for &lt;em&gt;true&lt;/em&gt;, irá retornar o item.&lt;/p&gt;

&lt;p&gt;Errado não está, mas existe um método específico para isso, como find.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const result = array.find(item =&amp;gt; item === 'oQueProcura')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usando &lt;em&gt;find&lt;/em&gt;, você tem ganho de performance, e você só irá sentir isso quando o array for maior. &lt;/p&gt;

&lt;p&gt;Como eu sei? Consultando o &lt;a href="http://devdocs.io" rel="noopener noreferrer"&gt;DevDocs&lt;/a&gt;. O DevDocs é uma biblioteca completa que mostra praticamente todos os métodos de uma linguagem e sua forma de usar. Acreidto que eles conseguiram inserir todas as linguagens existentes! Portanto, caso tenha dúvida de como usar um método na sua lingugagem, conte com o DevDocs. Ele é incrível! &lt;/p&gt;

&lt;h2&gt;
  
  
  Whimsical
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzixv23b7kzttdvbickr8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzixv23b7kzttdvbickr8.png" alt="Whimsical"&gt;&lt;/a&gt;&lt;br&gt;
Whimsical é um conjunto de vária ferramentas que vão te auxiliar na construção do seu projeto. &lt;/p&gt;

&lt;p&gt;Nele é possível fazer documentação do seu projeto utilizando o &lt;strong&gt;Docs&lt;/strong&gt;. Há várias funcionalidades que vão auxiliar, como atalhos em Markdown e  opções de arrastar/soltar, tudo isso para que você tenha uma melhor experiência na escrita de sua documentação.&lt;/p&gt;

&lt;p&gt;A ferramenta de desenho de fluxogramas é muito prática e intuitiva, sendo possível personalizar facilmente seus artefatos e utilizar o arrasta/solta.&lt;/p&gt;

&lt;p&gt;Sabe quando você precisa iniciar o desenvolvimento de telas do seu app, mas não tem nem noção de como vai ficar? A ferramenta de Wireframe vai te ajuda na construção da sua tela através de elementos configuráveis, como botões, entradas, caixas de seleção entre outros.&lt;/p&gt;

&lt;p&gt;Se você possuim uma ideia de projeto mas está com dificuldade em definir e organizar as regras de negócio, os Mapas Mentais vai te ajudar. Aqui é possível diagramar facilmente utilizando o arrasta/solta e personalizando de diversas formas.&lt;/p&gt;

&lt;p&gt;E depois de estar com sua documentação pronta, wireframe aprovado e a ideia bem formatada, agora é colocar em produção, e eu aconselho o uso do Kanban para organizar suas tasks. Para isso, o Stick Notes vai ajudar bastante, permitindo atribuir para uma pessoa, controlar e gerenciar através de gráficos e relatórios. Bastante intuitivo.&lt;/p&gt;

&lt;p&gt;Acesse &lt;a href="http://whimsical.com" rel="noopener noreferrer"&gt;aqui o site do Whimsical&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Firebase - Uma alternativa segura, simples e confiável</title>
      <dc:creator>Thiago Novato</dc:creator>
      <pubDate>Tue, 02 Feb 2021 16:04:20 +0000</pubDate>
      <link>https://dev.to/thiagonovato/firebase-uma-alternativa-segura-simples-e-confiavel-3hl5</link>
      <guid>https://dev.to/thiagonovato/firebase-uma-alternativa-segura-simples-e-confiavel-3hl5</guid>
      <description>&lt;p&gt;Clientes mais exigentes, mercado mais acirrado e tempo mais curto são questões que exigem um desdobramento muito maior de um desenvolvedor/empresa para entregar resultados. E atento à estas necessidades, surgem diversas soluções que contribuem com a vida das pessoas envolvidas e com as respectivas entregas aos clientes. Vamos falar um pouco sobre o Firebase, um complexo criado e mantido pelo Google, de forma dinâmica e bastante prática com um caso real.&lt;br&gt;
Este artigo é um desdobramento de um trabalho realizado por &lt;a href="https://github.com/danielpatricio-wa"&gt;Daniel Patrício&lt;/a&gt;, Carlos Paludetto e &lt;a href="https://github.com/thiagonovato"&gt;Thiago Novato&lt;/a&gt;, que serviu para apresentação interna na empresa &lt;a href="http://www.waproject.com.br"&gt;WA Project&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;O que é o Firebase&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;É um complexo de ferramentas disponíveis para facilitar o desenvolvimento de aplicações web e/ou mobile, muito prática e intuitiva.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Quem está usando?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Grandes empresas já utilizam em seus projetos (The New York Times, The Economist, Alibaba.com, todoist etc). É possível ver alguns cases de sucesso &lt;a href="https://firebase.google.com/use-cases?hl=pt-br"&gt;aqui&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Principais funções&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Dentre várias funções disponíveis no Firebase, iremos focar nas mais utilizadas em nosso projeto prático. São elas:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication&lt;/strong&gt;: O sistema de autenticação do Firebase permite habilitar em sua aplicação diversas formas de autenticar seu usuário, desde um simples login/senha ou até mesmo com a utilização dos principais serviços de autenticação de terceiros, como o próprio Google, Facebook, Twitter, GitHub, Microsoft, Apple entre outros. É possível também personalizar um template SMS para validação de usuário, template de email para criação/recuperação de senha e confirmação de número e email.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud Firestore&lt;/strong&gt;: Banco de Dados NoSql de leitura e escrita rápida, permitindo múltiplas conexões de usuários e criação de regras de acesso para melhora a segurança dos dados. Permite a sincronização dos dados em tempo real com todos os dispositivos conectados.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud Functions&lt;/strong&gt;: Permite executar código de back-end em Javascript e Typescript sem a necessidade de construir um servidor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hosting&lt;/strong&gt;: Serviço de hospedagem rápida e segura para aplicativos web, com conteúdo estáticos, dinâmicos e microsserviços. Altamente escalável.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud Storage&lt;/strong&gt;: Armazenamento e compartilhamento de arquivos ou conteúdos gerados pelos próprios usuários.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Caso prático&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Vamos criar um aplicativo de Chat, baseado nos principais serviços do Firebase&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Criando o projeto no Firebase&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Acesse &lt;a href="http://firebase.google.com"&gt;http://firebase.google.com&lt;/a&gt;, entre com sua conta Google (é obrigatório) e crie um novo projeto&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Nt8YWHGx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/00m168bvxco5he8pm7i5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Nt8YWHGx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/00m168bvxco5he8pm7i5.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Insira o nome do seu projeto, aceite os termos e clique em continuar&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xRjeNnWb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ewqi6jleuvfvve3p2qos.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xRjeNnWb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ewqi6jleuvfvve3p2qos.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clique em WEB para registrar seu APP, inserindo um apelido.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jLjPjtjj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tws56t4pi2p7uj6jsn1v.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jLjPjtjj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tws56t4pi2p7uj6jsn1v.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ao final, será gerado um objeto de configuração do Firebase, onde usaremos ele no projeto React.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Vq-nU834--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/khyomvhbzoetf93i0pps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Vq-nU834--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/khyomvhbzoetf93i0pps.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Criando o projeto React&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Agora vamos iniciar o projeto React e logo sem seguida vamos instalar as bibliotecas Firebase e Formik para gerenciar nossos formulários. Vamos partir do princípio que seu ambiente de desenvolvimento esteja configurado corretamente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-react-app firebase-chat-wa
cd firebase-chat-wa
yarn add firebase formik
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após a instalação, vamos abrir o projeto no VS Code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;code ./
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos criar algumas pastas e arquivos. No diretório "src/services", criaremos um serviço "auth.ts" com as seguintes funções:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---03yzxq---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cdkd2pkfyf6hkahzi6bt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---03yzxq---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cdkd2pkfyf6hkahzi6bt.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois usaremos esta funções na tela de Login, sendo uma no onSubmit do formulário caso queira autenticar seu usuário com login/senha, e as demais diretamente em buttons, como o "loginWithGoogle()" para autenticação Google ou "loginWithGitHub()" para autenticação via GitHub.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LXhY1zVJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/v324oadzo6ouz02vzeml.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LXhY1zVJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/v324oadzo6ouz02vzeml.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essa é a tela de Login&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AWk8w3d9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xe4i12uskjh7imaldn43.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AWk8w3d9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xe4i12uskjh7imaldn43.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essa é a tela de cadastro (para uso de autenticação com login/senha)&lt;br&gt;
 &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NtjUgFgl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sqkklyh9kl25h6mz4kfa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NtjUgFgl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sqkklyh9kl25h6mz4kfa.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Uma vez autenticado, é redirecionado para esta tela principal&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kwgVmw5V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wayt0ogm1176egt5a8uc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kwgVmw5V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wayt0ogm1176egt5a8uc.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No diretório "src/services", criaremos o serviço "cloudFirestore.ts" com o seguinte conteúdo, responsável por enviar as mensagens (salvando no banco), buscar uma determinada mensagem e listar todo o chat.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_cX-wQmo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gr0nuwmrirdl1i1jy1dc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_cX-wQmo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gr0nuwmrirdl1i1jy1dc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Usaremos a função de listar o chat no useEffect da página principal&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--edOrdd_w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q59c3ex84gnzg65ykfxk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--edOrdd_w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q59c3ex84gnzg65ykfxk.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O campo de texto para enviar as mensagens está em um formulário do Formik, cujo onSubmit é:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Lk1eWkjX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nx9p5tx4ongo7tuput27.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lk1eWkjX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nx9p5tx4ongo7tuput27.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Toda vez que uma mensagem é enviada, é feito um registro do Firestore, e pelo fato do banco ser real time, imediatamente é atualizado para todos os usuários conectados no chat, atualizando quase que instantaneamente a tela com a nova mensagem enviada.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--26rRh0Y2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ur84jnu51ssu6wkwke2t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--26rRh0Y2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ur84jnu51ssu6wkwke2t.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O código completo do projeto pode ser acessado &lt;a href="https://github.com/danieltpatricio/firebase-chat.git"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>firebase</category>
      <category>react</category>
      <category>nosql</category>
    </item>
  </channel>
</rss>
