<?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: Lincoli Xavier</title>
    <description>The latest articles on DEV Community by Lincoli Xavier (@lincolixavier).</description>
    <link>https://dev.to/lincolixavier</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%2F320874%2Fe9876c07-a32e-4158-b75f-4941b7f9484c.png</url>
      <title>DEV Community: Lincoli Xavier</title>
      <link>https://dev.to/lincolixavier</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lincolixavier"/>
    <language>en</language>
    <item>
      <title>Construindo um SaaS Starter Kit</title>
      <dc:creator>Lincoli Xavier</dc:creator>
      <pubDate>Tue, 16 Sep 2025 15:34:49 +0000</pubDate>
      <link>https://dev.to/lincolixavier/construindo-um-saas-starter-kit-26a1</link>
      <guid>https://dev.to/lincolixavier/construindo-um-saas-starter-kit-26a1</guid>
      <description>&lt;p&gt;&lt;em&gt;Comecei mais uma saga de projeto, dessa vez voltado pra devs.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pensando no aumento do uso de LLMs na produção de código e soluções, muitos programadores estão tirando ideais do papel, e isso é ótimo.&lt;/p&gt;

&lt;p&gt;Mas nem tudo são flores, ainda há um gap de qualidade nos projetos. Falta de infra, arquitetura e sustentabilidade. Além perderem muito tempo em escolher stack, providers, serviços, integrações e muito mais.&lt;/p&gt;

&lt;p&gt;Aqui entra o Arki. &lt;/p&gt;

&lt;p&gt;Vou trazer tudo isso já pronto com as soluções mais coerentes e validadas pelo mercado prontas pra plugar e acelerar ainda mais o lançamento de produtos. &lt;/p&gt;

&lt;p&gt;Linguagem, Banco de dados, Autenticação, Gateways de Pagamento, Emails, Dashboard, Design, Marketing, Controle de Membros… tudo isso já pronto.&lt;/p&gt;

&lt;p&gt;Com uma arquitetura fullstack robusta com monorepo, Typescript, Node, Postgres, Drizzle ORM, Zod, TanStack Query, NextJs e muito mais.&lt;/p&gt;

&lt;p&gt;Tudo o que é necessário para construir um SaaS moderno.&lt;/p&gt;

&lt;p&gt;Inclusive se tiverem sugestões de ferramentas, features interessantes, terei prazer em implementar :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.usearki.dev/" rel="noopener noreferrer"&gt;https://www.usearki.dev/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>saas</category>
      <category>productivity</category>
    </item>
    <item>
      <title>20 livros pra você adicionar na sua lista de leitura como profissional de Tecnologia</title>
      <dc:creator>Lincoli Xavier</dc:creator>
      <pubDate>Fri, 15 Aug 2025 13:32:26 +0000</pubDate>
      <link>https://dev.to/lincolixavier/20-livros-pra-voce-adicionar-na-sua-lista-de-leitura-como-profissional-de-tecnologia-3bb6</link>
      <guid>https://dev.to/lincolixavier/20-livros-pra-voce-adicionar-na-sua-lista-de-leitura-como-profissional-de-tecnologia-3bb6</guid>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/41LyTyj" rel="noopener noreferrer"&gt;&lt;strong&gt;Algoritmos para viver – Brian Christian &amp;amp; Tom Griffiths&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Explora como algoritmos computacionais podem ajudar na tomada de decisões humanas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/4lngQFD" rel="noopener noreferrer"&gt;&lt;strong&gt;Test-Driven Development&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Guia prático para escrever testes antes do código, reforçando design limpo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/3HBsiQa" rel="noopener noreferrer"&gt;&lt;strong&gt;AI Superpowers – Kai-Fu Lee&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Analisa a corrida da IA entre EUA e China e suas implicações geopolíticas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/3HAmQwY" rel="noopener noreferrer"&gt;&lt;strong&gt;A Informação – James Gleick&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
História da informação desde linguagens antigas até a era digital.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/4mj9nJf" rel="noopener noreferrer"&gt;&lt;strong&gt;Planning Extreme Programming&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Como planejar e executar projetos com Extreme Programming.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/3HyLxdc" rel="noopener noreferrer"&gt;&lt;strong&gt;Entendendo Algoritmos – Aditya Bhargava&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Introdução visual e simplificada a algoritmos clássicos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/4mCZAgG" rel="noopener noreferrer"&gt;&lt;strong&gt;CSS Secrets – Lea Verou&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Soluções criativas para problemas comuns de CSS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/4mHhwqm" rel="noopener noreferrer"&gt;&lt;strong&gt;Clean Code – Robert C. Martin&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Princípios e práticas para escrever código limpo e manutenível.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/45QeMkV" rel="noopener noreferrer"&gt;&lt;strong&gt;Implementando Domain-Driven Design – Vaughn Vernon&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Guia detalhado para aplicar DDD em projetos reais.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/4mhofHN" rel="noopener noreferrer"&gt;&lt;strong&gt;Monolith to Microservices – Sam Newman&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Padrões e estratégias para migrar de monólitos para microsserviços.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/4fDHFEv" rel="noopener noreferrer"&gt;&lt;strong&gt;Introduction to Graph Theory – Richard J. Trudeau&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Introdução acessível à teoria dos grafos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/4fCQeiJ" rel="noopener noreferrer"&gt;&lt;strong&gt;O livro da matemática – Clifford A. Pickover&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
História e conceitos matemáticos importantes em formato ilustrado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/45wIdY0" rel="noopener noreferrer"&gt;&lt;strong&gt;Learning Domain-Driven Design – Vlad Khononov&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Introdução moderna ao DDD, com foco em alinhamento de negócios.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/3JiSobq" rel="noopener noreferrer"&gt;&lt;strong&gt;Algorithmic Thinking – Daniel Zingaro&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Ensina resolução de problemas usando algoritmos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/45CkmX6" rel="noopener noreferrer"&gt;&lt;strong&gt;Algorithms – Robert Sedgewick &amp;amp; Kevin Wayne&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Guia abrangente de algoritmos clássicos e modernos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/45CsEhF" rel="noopener noreferrer"&gt;&lt;strong&gt;The Design of Web APIs – Arnaud Lauret&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Boas práticas para projetar APIs claras e escaláveis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/3UrbI8F" rel="noopener noreferrer"&gt;&lt;strong&gt;Database Internals – Alex Petrov&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Funcionamento interno de bancos de dados distribuídos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/4lAr5GR" rel="noopener noreferrer"&gt;&lt;strong&gt;Designing Data-Intensive Applications – Martin Kleppmann&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Guia sobre sistemas escaláveis e tolerantes a falhas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/4mCtKk4" rel="noopener noreferrer"&gt;&lt;strong&gt;Coders at Work – Peter Seibel&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Entrevistas com programadores renomados sobre suas práticas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/3JiuAEn" rel="noopener noreferrer"&gt;&lt;strong&gt;Why Programs Fail – Andreas Zeller&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Técnicas de depuração e análise de falhas em software.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Gostou? Se quiser mais livros comenta aqui.&lt;/p&gt;

&lt;p&gt;E se quiser ler comigo, vem pro &lt;a href="https://github.com/lincolixavier/clube-do-livro-dev" rel="noopener noreferrer"&gt;clube do livro dev&lt;/a&gt; :) &lt;/p&gt;

</description>
      <category>books</category>
      <category>webdev</category>
      <category>career</category>
      <category>programming</category>
    </item>
    <item>
      <title>Checklist Completo para Lançar Seu SaaS do Zero</title>
      <dc:creator>Lincoli Xavier</dc:creator>
      <pubDate>Wed, 30 Apr 2025 16:16:06 +0000</pubDate>
      <link>https://dev.to/lincolixavier/checklist-completo-para-lancar-seu-saas-do-zero-g13</link>
      <guid>https://dev.to/lincolixavier/checklist-completo-para-lancar-seu-saas-do-zero-g13</guid>
      <description>&lt;h3&gt;
  
  
  ✦ Por que seguir esse checklist?
&lt;/h3&gt;

&lt;p&gt;Lançar um SaaS envolve muitos detalhes técnicos e estratégicos. Esse guia foi feito para te ajudar a sair do "modo ideia" e colocar seu produto no ar com o essencial para validar, vender e crescer.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 1. &lt;strong&gt;Landing Page com CTA Claro&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A landing é sua vitrine. Precisa ser objetiva, responsiva e persuasiva.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Destaque o problema que você resolve.&lt;/li&gt;
&lt;li&gt;Mostre o benefício principal em até 5 segundos.&lt;/li&gt;
&lt;li&gt;Use um &lt;strong&gt;Call to Action direto&lt;/strong&gt;: “Teste grátis”, “Comece agora”, “Ver preços”.&lt;/li&gt;
&lt;li&gt;Ferramentas úteis: &lt;a href="https://carrd.co" rel="noopener noreferrer"&gt;Carrd&lt;/a&gt;, &lt;a href="https://framer.com" rel="noopener noreferrer"&gt;Framer&lt;/a&gt;, &lt;a href="https://webflow.com" rel="noopener noreferrer"&gt;Webflow&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ 2. &lt;strong&gt;Dashboard Funcional com a Feature Principal&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Seu SaaS não precisa estar completo — mas precisa &lt;strong&gt;funcionar minimamente&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A primeira funcionalidade precisa entregar &lt;strong&gt;valor real&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Mantenha simples, mas usável.&lt;/li&gt;
&lt;li&gt;Evite adicionar 10 recursos antes de validar 1.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ 3. &lt;strong&gt;Infraestrutura Básica no Ar&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Seu app precisa rodar de forma estável.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use soluções como: Vercel, Netlify, Fly.io ou Railway para backends leves.&lt;/li&gt;
&lt;li&gt;Banco de dados: Supabase, PlanetScale, Neon ou SQLite para o início.&lt;/li&gt;
&lt;li&gt;Coloque monitoramento (uptime, erros, etc) — comece com o &lt;a href="https://uptimerobot.com" rel="noopener noreferrer"&gt;UptimeRobot&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ 4. &lt;strong&gt;Domínio Próprio Comprado&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Evite domínios com extensões estranhas. Foque em algo simples e memorável.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Namecheap, Google Domains ou Cloudflare.&lt;/li&gt;
&lt;li&gt;Dica: .com, .io, .tech ou .dev são boas opções.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ 5. &lt;strong&gt;Email Corporativo&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Passa credibilidade e ajuda na entrega de emails (especialmente para onboarding e suporte).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zoho Mail é gratuito para 1 conta com domínio próprio.&lt;/li&gt;
&lt;li&gt;Também vale usar o Google Workspace depois da validação.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ 6. &lt;strong&gt;Precificação Definida&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Você precisa saber quanto cobrar &lt;strong&gt;antes de começar a divulgar&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Escolha entre modelo gratuito, freemium, trial ou pago direto.&lt;/li&gt;
&lt;li&gt;Evite “preço sob consulta” no início.&lt;/li&gt;
&lt;li&gt;Use plataformas como Stripe, Mercado Pago ou Gumroad para checkout.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ 7. &lt;strong&gt;Checagem de Concorrentes&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Você precisa entender o terreno.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quais features eles têm?&lt;/li&gt;
&lt;li&gt;Qual o preço médio?&lt;/li&gt;
&lt;li&gt;Como eles comunicam o valor?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use isso pra &lt;strong&gt;diferenciar seu SaaS&lt;/strong&gt;, e não só copiar.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 8. &lt;strong&gt;Checkout Ativo – Comece com CPF Mesmo&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Não espere ter empresa aberta. Plataformas como Mercado Pago permitem receber com CPF.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure um checkout simples.&lt;/li&gt;
&lt;li&gt;Deixe claro que está no início e em fase de testes.&lt;/li&gt;
&lt;li&gt;Capriche na confiança (testemunhos, selos, etc).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ 9. &lt;strong&gt;Teste de Pagamento Funcionando&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Simule uma compra real.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Teste todos os caminhos (sucesso, erro, cancelamento).&lt;/li&gt;
&lt;li&gt;Valide se o cliente recebe e-mail de confirmação.&lt;/li&gt;
&lt;li&gt;Garanta que você também seja notificado.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ 10. &lt;strong&gt;Política de Reembolso, Termos e Privacidade&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Mesmo sendo MVP, isso passa segurança e evita dor de cabeça.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gere com ferramentas como Termly, Iubenda ou o &lt;a href="https://privacidadedigital.com.br" rel="noopener noreferrer"&gt;Privacidade Digital&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Seja transparente e direto.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ 11. &lt;strong&gt;Instagram Ativo com Link da Landing&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Marketing é obrigatório.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crie um perfil que pareça profissional.&lt;/li&gt;
&lt;li&gt;Poste bastidores, atualizações e conteúdos que ensinem algo.&lt;/li&gt;
&lt;li&gt;Adicione link para a landing no perfil.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ 12. &lt;strong&gt;Analytics Instalado&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;O que não é medido, não melhora.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instale Google Analytics, Plausible ou Umami.&lt;/li&gt;
&lt;li&gt;Monitore visitas, conversões e comportamento.&lt;/li&gt;
&lt;li&gt;Use os dados pra melhorar sua comunicação e produto.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚡ Conclusão
&lt;/h2&gt;

&lt;p&gt;Com esse checklist, você sai do papel e entra no jogo. Lançar um SaaS &lt;strong&gt;não precisa ser complexo&lt;/strong&gt;, mas precisa ser estratégico.&lt;/p&gt;

&lt;p&gt;Comece simples, entregue valor e ouça seus primeiros usuários.&lt;/p&gt;




&lt;p&gt;.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;/p&gt;

&lt;p&gt;✨ Conheça a Comunidade Nomadz ✨&lt;br&gt;
👉🏻 &lt;a href="https://www.patreon.com/nomadz/membership" rel="noopener noreferrer"&gt;https://www.patreon.com/nomadz/membership&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quer falar comigo? Tô por aqui:&lt;br&gt;
&lt;a href="https://instagram.com/lincoli.xavier" rel="noopener noreferrer"&gt;https://instagram.com/lincoli.xavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lincolixavier" rel="noopener noreferrer"&gt;https://twitter.com/lincolixavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtube.com/@lincoli.xavier/" rel="noopener noreferrer"&gt;https://youtube.com/@lincoli.xavier/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.lincolixavier.com/" rel="noopener noreferrer"&gt;https://www.lincolixavier.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>saas</category>
      <category>checklist</category>
      <category>startup</category>
    </item>
    <item>
      <title>Guia completo de UX/UI Design do Zero ao Avançado</title>
      <dc:creator>Lincoli Xavier</dc:creator>
      <pubDate>Thu, 10 Apr 2025 01:17:16 +0000</pubDate>
      <link>https://dev.to/lincolixavier/guia-completo-de-uxui-design-do-zero-ao-avancado-5d63</link>
      <guid>https://dev.to/lincolixavier/guia-completo-de-uxui-design-do-zero-ao-avancado-5d63</guid>
      <description>&lt;p&gt;Além de software, trabalho com design desde 2014. Sempre é bom ter um guia de tópicos pra guiar os estudos.&lt;/p&gt;

&lt;p&gt;Aqui juntei lições, dicas práticas, referências (livros, vídeos, artigos), e sugestões de exercícios em cada etapa. A ideia é te dar uma jornada sólida, teórica e prática, para se tornar um(a) designer de produtos digitais com domínio em UX e UI.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 Módulo 0 – Introdução ao UX/UI Design
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🎯 Objetivos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Entender o que é UX e UI.&lt;/li&gt;
&lt;li&gt;Diferenciar papéis no design digital.&lt;/li&gt;
&lt;li&gt;Conhecer a importância do design centrado no usuário.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧩 Lições:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;O que é UX Design?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O que é UI Design?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design Thinking, Agile e Lean UX&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diferença entre UX Designer, UI Designer, Product Designer e Service Designer&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hard skills e soft skills necessárias&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📚 Referências:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;a href="https://amzn.to/44i4nOE" rel="noopener noreferrer"&gt;&lt;em&gt;The Design of Everyday Things&lt;/em&gt;&lt;/a&gt; – Don Norman&lt;/li&gt;
&lt;li&gt;📺 &lt;a href="https://www.nngroup.com/videos/ux-definition/" rel="noopener noreferrer"&gt;Nielsen Norman Group – What is UX?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📘 &lt;a href="https://amzn.to/42mH1F1" rel="noopener noreferrer"&gt;&lt;em&gt;Don't Make Me Think&lt;/em&gt;&lt;/a&gt; – Steve Krug&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Exercícios:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Escreva sua definição pessoal de UX e UI.&lt;/li&gt;
&lt;li&gt;Liste 5 produtos digitais que você usa e analise a experiência do usuário.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🔬 Módulo 1 – Fundamentos de Psicologia e Design Cognitivo
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🎯 Objetivos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Entender como as pessoas pensam, sentem e se comportam diante de interfaces.&lt;/li&gt;
&lt;li&gt;Usar princípios de psicologia para criar experiências melhores.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧩 Lições:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Gestalt e percepção visual&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memória e carga cognitiva&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mapas mentais e modelos mentais&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fatores humanos e usabilidade&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📚 Referências:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;a href="https://amzn.to/3Genzml" rel="noopener noreferrer"&gt;&lt;em&gt;100 Things Every Designer Needs to Know About People&lt;/em&gt;&lt;/a&gt; – Susan Weinschenk&lt;/li&gt;
&lt;li&gt;📘 &lt;em&gt;Laws of UX&lt;/em&gt; – Jon Yablonski (também em &lt;a href="https://lawsofux.com/" rel="noopener noreferrer"&gt;laws-of-ux.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;📺 &lt;a href="https://www.nngroup.com/articles/principles-visual-design/" rel="noopener noreferrer"&gt;Principles of Gestalt Psychology – NNGroup&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Exercícios:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Recrie a interface de um app usando pelo menos 3 leis de Gestalt.&lt;/li&gt;
&lt;li&gt;Crie um mapa mental para um fluxo de compra em um e-commerce.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🧱 Módulo 2 – Pesquisa em UX (UX Research)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🎯 Objetivos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Aprender a coletar dados reais para informar decisões de design.&lt;/li&gt;
&lt;li&gt;Validar ideias com usuários.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧩 Lições:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Tipos de pesquisa: qualitativa vs quantitativa&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entrevistas com usuários&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personas e proto-personas&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mapas de empatia&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jornadas do usuário (User Journey Maps)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testes de usabilidade&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📚 Referências:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;a href="https://amzn.to/425p1QF" rel="noopener noreferrer"&gt;&lt;em&gt;UX Research&lt;/em&gt;&lt;/a&gt; – Brad Nunnally e David Farkas&lt;/li&gt;
&lt;li&gt;📘 &lt;a href="https://amzn.to/3RbrXFa" rel="noopener noreferrer"&gt;&lt;em&gt;Validating Product Ideas&lt;/em&gt;&lt;/a&gt; – Tomer Sharon&lt;/li&gt;
&lt;li&gt;📺 &lt;a href="https://www.nngroup.com/topic/user-research-methods/" rel="noopener noreferrer"&gt;UX Research Methods – NNGroup&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Exercícios:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Conduza uma entrevista com pelo menos 3 pessoas sobre um produto digital.&lt;/li&gt;
&lt;li&gt;Crie uma persona baseada nas entrevistas.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🧭 Módulo 3 – Arquitetura da Informação &amp;amp; UX Writing
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🎯 Objetivos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Organizar informações de forma lógica.&lt;/li&gt;
&lt;li&gt;Criar textos que guiam e ajudam o usuário.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧩 Lições:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Sitemaps e hierarquia de conteúdo&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Card sorting&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wireframes e fluxos de navegação&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microcopy, UX writing e conteúdo orientado à ação&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📚 Referências:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;a href="https://amzn.to/4jk7iL2" rel="noopener noreferrer"&gt;&lt;em&gt;Information Architecture for the Web and Beyond&lt;/em&gt;&lt;/a&gt; – Louis Rosenfeld&lt;/li&gt;
&lt;li&gt;📘 &lt;a href="https://amzn.to/3E2oZQx" rel="noopener noreferrer"&gt;&lt;em&gt;Strategic Writing for UX&lt;/em&gt;&lt;/a&gt; – Torrey Podmajersky&lt;/li&gt;
&lt;li&gt;📺 &lt;a href="https://uxdesign.cc/tagged/ux-writing" rel="noopener noreferrer"&gt;UX Writing – UX Collective&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Exercícios:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Faça um card sorting com amigos usando o método aberto.&lt;/li&gt;
&lt;li&gt;Redija os microtextos para uma tela de login e cadastro.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🎨 Módulo 4 – UI Design e Design Visual
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🎯 Objetivos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Aprender os princípios do design visual aplicados à UI.&lt;/li&gt;
&lt;li&gt;Criar interfaces esteticamente agradáveis e funcionais.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧩 Lições:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Princípios de Design Visual: alinhamento, contraste, proximidade, repetição&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Teoria das cores e acessibilidade&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tipografia na interface&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design Tokens e Design Systems&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Criação de mockups e protótipos com Figma/Sketch&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📚 Referências:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;a href="https://www.smashingmagazine.com/printed-books/design-systems/" rel="noopener noreferrer"&gt;&lt;em&gt;Design Systems&lt;/em&gt;&lt;/a&gt; – Alla Kholmatova&lt;/li&gt;
&lt;li&gt;📺 &lt;a href="https://www.youtube.com/watch?v=FTFaQWZBqQ8" rel="noopener noreferrer"&gt;Figma Crash Course – FreeCodeCamp&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Exercícios:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Recrie a UI de um app famoso no Figma.&lt;/li&gt;
&lt;li&gt;Monte um mini design system com cores, botões e tipografia.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🧪 Módulo 5 – Prototipação e Testes de Usabilidade
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🎯 Objetivos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Criar protótipos navegáveis.&lt;/li&gt;
&lt;li&gt;Testar hipóteses com usuários reais.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧩 Lições:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prototipação: baixa vs alta fidelidade&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ferramentas: Figma, Framer, ProtoPie&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Planejamento de testes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testes moderados e não moderados&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heurísticas de Nielsen&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📚 Referências:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;a href="https://amzn.to/3RFSudM" rel="noopener noreferrer"&gt;&lt;em&gt;Rocket Surgery Made Easy&lt;/em&gt;&lt;/a&gt; – Steve Krug&lt;/li&gt;
&lt;li&gt;📘 &lt;a href="https://amzn.to/3YqxPOJ" rel="noopener noreferrer"&gt;&lt;em&gt;Handbook of Usability Testing&lt;/em&gt;&lt;/a&gt; – Jeffrey Rubin&lt;/li&gt;
&lt;li&gt;📺 &lt;a href="https://www.nngroup.com/articles/heuristic-evaluation/" rel="noopener noreferrer"&gt;Heuristic Evaluation – NNGroup&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Exercícios:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Prototipe um app simples no Figma.&lt;/li&gt;
&lt;li&gt;Realize um teste com 2 usuários e anote os problemas.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  ⚙️ Módulo 6 – Ferramentas e Fluxo de Trabalho Profissional
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🎯 Objetivos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Aprender o fluxo completo de trabalho do designer.&lt;/li&gt;
&lt;li&gt;Colaborar com times de produto e desenvolvimento.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧩 Lições:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;DesignOps e handoff para devs&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anotações e documentação&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integração com ferramentas (Zeplin, Storybook, JIRA)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design versionado: Figma, Git e bibliotecas compartilhadas&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trabalhando em times ágeis (Scrum, Kanban)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📚 Referências:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;a href="https://stephaniekabi.com/designops-handbook-summary/" rel="noopener noreferrer"&gt;&lt;em&gt;DesignOps Handbook&lt;/em&gt;&lt;/a&gt; – InVision&lt;/li&gt;
&lt;li&gt;📺 &lt;a href="https://www.figma.com/community/file/864753203644502361" rel="noopener noreferrer"&gt;Figma + Dev Handoff&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Exercícios:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Crie um arquivo Figma com documentação clara para devs.&lt;/li&gt;
&lt;li&gt;Simule um ciclo de sprint com user stories e wireframes.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Módulo 7 – Projeto Final + Portfólio
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🎯 Objetivos:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Consolidar todo o aprendizado com um projeto real.&lt;/li&gt;
&lt;li&gt;Construir um portfólio matador.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧩 Lições:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Escolha do problema e validação&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pesquisa, personas e jornadas&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wireframes, UI, protótipos e testes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apresentação do case&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Como montar um bom portfólio de UX/UI&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📚 Referências:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📘 &lt;em&gt;Case Study Manual&lt;/em&gt; – UX Collective&lt;/li&gt;
&lt;li&gt;📺 &lt;a href="https://www.youtube.com/@uxnow" rel="noopener noreferrer"&gt;Como criar um portfólio de UX – Canal UXNOW&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Exercícios:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Escolha um problema real (ex: app para mães, pet shop, delivery local).&lt;/li&gt;
&lt;li&gt;Siga todas as etapas e monte seu primeiro case no Notion, Behance ou site pessoal.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🧭 Dicas Finais para a Jornada
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;✅ Sempre valide com usuários. A intuição vem depois da experiência.&lt;/li&gt;
&lt;li&gt;🧪 Teste o tempo todo. Tudo é hipótese até o usuário interagir.&lt;/li&gt;
&lt;li&gt;📚 Leia muito, mas pratique mais ainda.&lt;/li&gt;
&lt;li&gt;🎯 Design não é arte: é resolver problemas com empatia e clareza.&lt;/li&gt;
&lt;li&gt;🤝 Participe de comunidades (UX Collective, ADPList, Discords de design).&lt;/li&gt;
&lt;li&gt;🛠️ Nunca pare de aprender: o mundo do design muda o tempo todo.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://github.com/lincolixavier/guia-final-ux-ui/" rel="noopener noreferrer"&gt;Repositório&lt;/a&gt; que vou atualizar sempre que possível com novos materiais.&lt;/p&gt;

&lt;p&gt;Aproveite e bons estudos.&lt;/p&gt;

</description>
      <category>design</category>
      <category>ux</category>
      <category>ui</category>
      <category>weeklyui</category>
    </item>
    <item>
      <title>Checklist de um projeto completo e pronto pra produção em Nuxt</title>
      <dc:creator>Lincoli Xavier</dc:creator>
      <pubDate>Tue, 04 Mar 2025 15:38:52 +0000</pubDate>
      <link>https://dev.to/lincolixavier/checklist-de-um-projeto-completo-em-nuxt-4fhf</link>
      <guid>https://dev.to/lincolixavier/checklist-de-um-projeto-completo-em-nuxt-4fhf</guid>
      <description>&lt;p&gt;Um projeto complexo de Nuxt.js precisa de uma estrutura bem organizada, ferramentas adequadas e boas práticas para garantir desempenho, escalabilidade e manutenibilidade. &lt;/p&gt;

&lt;p&gt;Os principais pontos que podem ser necessários:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Configuração Inicial&lt;/strong&gt;&lt;br&gt;
TypeScript: Tipagem estática e maior segurança no código.&lt;br&gt;
ESLint e Prettier: Manter padrões do código.&lt;br&gt;
Husky + lint-staged: Rodar verificações de código antes dos commits.&lt;br&gt;
Sass/SCSS/PostCSS: Estilos complexos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Gerenciamento de Estado&lt;/strong&gt;&lt;br&gt;
Pinia (preferível ao Vuex): Estado global reativo e escalável.&lt;br&gt;
useState do Nuxt: Estado local simples dentro de páginas/composables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Consumo de APIs&lt;/strong&gt;&lt;br&gt;
TanStackQuery/useFetch/useAsyncData: Buscar dados com suporte a SSR e caching.&lt;br&gt;
Nuxt API Routes: Backends leves dentro do projeto.&lt;br&gt;
Middleware de requisições: Para logs, autenticação e tratamento de erros.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Performance e Otimização&lt;/strong&gt;&lt;br&gt;
Code Splitting e Lazy Loading: Carregar apenas o necessário.&lt;br&gt;
Imagens otimizadas (nuxt/image): Otimizar formatos, tamanhos e carregamento de imagens.&lt;br&gt;
Geração estática (SSG), renderização no servidor (SSR) ou ISG: Escolher conforme o projeto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. SEO e Acessibilidade&lt;/strong&gt;&lt;br&gt;
useHead() ou Nuxt SEO Module: Gerenciar metadados e SEO.&lt;br&gt;
Sitemap e robots.txt: Automação da geração desses arquivos.&lt;br&gt;
Schema.org: Dados estruturados para SEO avançado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Autenticação e Autorização&lt;/strong&gt;&lt;br&gt;
Nuxt Auth ou OAuth2/JWT: Login seguro.&lt;br&gt;
Middleware de autenticação: Proteger rotas privadas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Componentização e UI&lt;/strong&gt;&lt;br&gt;
Storybook: Documentar e desenvolver componentes de forma isolada. Escolha usar com sabedoria. &lt;br&gt;
Componentes UI reutilizáveis: Criar uma biblioteca ou usar frameworks como Vuetify, MUI, Naive UI ou Element Plus.&lt;br&gt;
Design Tokens: Centralizar cores, espaçamentos e fontes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Testes&lt;/strong&gt;&lt;br&gt;
Vitest: Testes unitários.&lt;br&gt;
Vue Testing Library: Testes de componentes. &lt;br&gt;
Cypress ou Playwright com BDD: Testes de ponta a ponta (E2E). ~Eu prefiro Playwright&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Infraestrutura e Deploy&lt;/strong&gt;&lt;br&gt;
CI/CD com GitHub Actions ou Vercel/Netlify: Automação de deploys e testes.&lt;br&gt;
Docker: Padronizar o ambiente.&lt;br&gt;
Monitoramento e logs: Ferramentas como Sentry ou LogRocket.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Escalabilidade e Organização&lt;/strong&gt;&lt;br&gt;
Estrutura de pastas bem definida: Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;composables&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;stores&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;layouts&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;middleware&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;assets&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;utils&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modularização: Separação de código em composables e stores.&lt;br&gt;
Sempre trabalhar com o conceito de Bounded Contexts do DDD ao usar as pastas e arquivos, mantenha tudo que for do mesmo contexto próximos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11. Funcionalidades Avançadas&lt;/strong&gt;&lt;br&gt;
Internacionalização (nuxt/i18n): Suporte a múltiplos idiomas.&lt;br&gt;
WebSockets ou SSE: Comunicação em tempo real.&lt;br&gt;
PWA (@nuxt/pwa): Transformar o app em um Progressive Web App.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12. Analytics e Monitoramento&lt;/strong&gt;&lt;br&gt;
Google Analytics, Plausible ou Matomo: Rastreamento de comportamento do usuário.&lt;br&gt;
Sentry: Monitoramento de erros.&lt;br&gt;
Hotjar ou FullStory: Mapas de calor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13. Documentação&lt;/strong&gt;&lt;br&gt;
README bem escrito no GitHub.&lt;br&gt;
ADRs (Arquivos de Decisão de Arquitetura): Documentar decisões.&lt;br&gt;
Comentários e JSDoc: Para facilitar manutenção.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14. Gerenciamento de Dependências&lt;/strong&gt;&lt;br&gt;
pnpm, Bun ou Yarn: Escolher um gerenciador rápido.&lt;br&gt;
Renovate ou Dependabot: Para manter pacotes atualizados automaticamente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;15. Segurança&lt;/strong&gt;&lt;br&gt;
Rate Limiting: Para evitar abuso de APIs.&lt;br&gt;
Sanitização de inputs: Prevenir XSS e injeção de código.&lt;/p&gt;

&lt;p&gt;Esse checklist cobre um projeto robusto em Nuxt.js com foco em boas práticas, escalabilidade e performance.&lt;/p&gt;

&lt;p&gt;Acho que essa lista cobre quase tudo pra um projeto de ponta de linha hoje em dia! O que faltou? Comenta ai pra gente trocar ideia!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>checklist</category>
      <category>programming</category>
      <category>nuxt</category>
    </item>
    <item>
      <title>Metas 2025 ✨</title>
      <dc:creator>Lincoli Xavier</dc:creator>
      <pubDate>Tue, 07 Jan 2025 09:43:06 +0000</pubDate>
      <link>https://dev.to/lincolixavier/metas-2025-mdb</link>
      <guid>https://dev.to/lincolixavier/metas-2025-mdb</guid>
      <description>&lt;p&gt;Definir metas de ano novo pra mim não é sobre conquistar tudo, e sim sobre ter um norte pra guiar meu dia-dia das coisas que quero e diminuir as distrações&lt;/p&gt;

&lt;p&gt;Essas são as minhas pra esse ano!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Incrementar o parsing do HTML - Nami&lt;/strong&gt;&lt;br&gt;
Seguindo ainda o mesmo do ano passado. Estou construindo um navegador do zero em Rust (tentando) e tem sido bem desafiador, esse ano quero continuar o parse do HTML seguindo a spec e melhorar algumas coisinhas&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/lincolixavier/nami-browser" rel="noopener noreferrer"&gt;Nami&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 3000 minutos de meditação&lt;/strong&gt;&lt;br&gt;
Em 2024 consegui! Quero manter esse ano. Eu medito desde 2020 usando headspace, quero melhorar ainda mais essa prática esse ano, fazendo mais cursos intensivos e pro que tem no app. Mindfulness é incrível!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Publicar com frequencia na Nomadz&lt;/strong&gt; &lt;br&gt;
Meu foco esse ano não será quantidade de assinantes e sim consistência de conteúdo! Em 2023 criei minha comunidade para nômades digitais mochileiros :) entrou bastante no discord de graça, gravei 2 super aulas e postei alguns conteúdo free.&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://www.patreon.com/nomadz/membership" rel="noopener noreferrer"&gt;Nomadz&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;🔹 MVP Librium&lt;/strong&gt; &lt;br&gt;
Ano passo consegui evoluir alguns scripts dos livros, espero evoluir o suficiente pra lançar o MVP esse ano! Minha rede social de leitura =D&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 25 Livros&lt;/strong&gt; &lt;br&gt;
Consegui ano passado, mas passou raspando, esse ano mantenho a meta!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Viagem pro Japão&lt;/strong&gt; &lt;br&gt;
Também consegui evoluir no meu japones ja leio bem Hiragana e agora chegou a hora de praticar na terra do sol nascente! Espero muito por essa viagem!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Saltar de Helicoptero&lt;/strong&gt; &lt;br&gt;
Consegui virar Categoria B no paraquedismo em 2024 viajando é bem dificil achar áreas que aceitam iniciantes pra saltar, mas aos poucos completei os 50 saltos e a prova necessária, e agora posso várias coisas tipo saltar de helicoptero e ter uma camera no meu capacete =D&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;🔹 Aprender Deslok,Sit Fly e Back Fly *&lt;/em&gt; &lt;br&gt;
E claro, quero continuar evoluindo no esporte e voar melhor aprendendo outras técnicas&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Ouro no LoL&lt;/strong&gt; &lt;em&gt;Secreta&lt;/em&gt;&lt;br&gt;
Não custa sonhar mas eu levo esse joguinho bem a sério!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔹 Tomorrowland 2025&lt;/strong&gt;&lt;br&gt;
Em 2024 foi um objetivo alcançado, e agora virou tradição, meta ir nesse festival incrível na Bélgica todo ano.&lt;/p&gt;

&lt;p&gt;Vamos ver quantas dessas vou conquistar esse ano!&lt;/p&gt;

&lt;p&gt;Desejo que você conquiste as suas também&lt;/p&gt;

&lt;p&gt;Feliz 2025! o/&lt;/p&gt;

&lt;p&gt;.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;/p&gt;

&lt;p&gt;✨ Conheça a Comunidade Nomadz  ✨&lt;br&gt;
👉🏻 &lt;a href="https://www.patreon.com/nomadz/membership" rel="noopener noreferrer"&gt;https://www.patreon.com/nomadz/membership&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quer falar comigo? Tô por aqui:&lt;br&gt;
&lt;a href="https://instagram.com/lincoli.xavier" rel="noopener noreferrer"&gt;https://instagram.com/lincoli.xavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lincoli.xavier" rel="noopener noreferrer"&gt;https://www.tiktok.com/@lincoli.xavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lincolixavier" rel="noopener noreferrer"&gt;https://twitter.com/lincolixavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtube.com/@lincoli.xavier/" rel="noopener noreferrer"&gt;https://youtube.com/@lincoli.xavier/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.lincolixavier.com/" rel="noopener noreferrer"&gt;https://www.lincolixavier.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>development</category>
      <category>productivity</category>
    </item>
    <item>
      <title>5 lições que aprendi depois de trabalhar remoto por 7 anos</title>
      <dc:creator>Lincoli Xavier</dc:creator>
      <pubDate>Thu, 05 Dec 2024 14:08:23 +0000</pubDate>
      <link>https://dev.to/lincolixavier/5-licoes-que-aprendi-depois-de-trabalhar-remoto-por-7-anos-39i2</link>
      <guid>https://dev.to/lincolixavier/5-licoes-que-aprendi-depois-de-trabalhar-remoto-por-7-anos-39i2</guid>
      <description>&lt;p&gt;Desde 2017 tenho trabalho fulltime remotamente em projeto e empresas de quase todos os tamanhos e nichos. A pandemia com certeza acelerou a remotização dos trabalhos especialmente em desenvolvimento de software. E hoje o trabalho remoto não é apenas uma tendência; é uma realidade que transforma a maneira como interagimos com nossas equipes e executamos nossas tarefas. Mas, para que ele funcione bem, é essencial adotar práticas que promovam inclusão, produtividade e bem-estar. Quero compartilhar algumas lições que aprendi desses últimos anos:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Se todos estão remotos, todos são parte do time&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Trabalhar remotamente significa que todos devem ter as mesmas oportunidades de participação e engajamento, independentemente de onde estejam. Ninguém deve se sentir isolado ou relegado a um papel secundário. Incentive a colaboração ativa em discussões e decisões, garantindo que a flexibilidade do trabalho remoto seja tratada como um padrão, não como um benefício extra.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Construa uma base de confiança&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A autonomia é essencial no trabalho remoto. Microgestão não é produtiva e pode minar a motivação da equipe. Defina metas claras e objetivos compartilhados, permitindo que cada membro seja responsável por suas contribuições. Isso fortalece o senso de responsabilidade coletiva e a liderança individual.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Evite a armadilha do trabalho constante&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A flexibilidade é uma vantagem do trabalho remoto, mas é importante não se tornar refém dela. Trabalhar sem limites claros pode comprometer sua energia e foco. Crie uma rotina organizada com metas diárias, semanais e mensais, e imponha limites para garantir que você tenha tempo para descansar e recarregar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. O trabalho remoto é colaborativo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Trabalhar remotamente não significa isolamento. A comunicação regular entre os membros do time é fundamental. Pequenos gestos como cumprimentar os colegas no início do dia ou perguntar sobre seus interesses pessoais ajudam a fortalecer os laços e a criar um ambiente de equipe mais próximo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Crie rituais para substituir o ambiente de escritório&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quando não há mais a ida ao escritório para marcar o início do dia, você precisa estabelecer novos hábitos. Desenvolva uma rotina matinal que ajude a "ativar" seu cérebro para o trabalho, seja arrumando seu espaço ou praticando um ritual que funcione para você. Por exemplo pra mim é impossível trabalhar de pijama rs, preciso estar minimamente "arrumado" pra começar o dia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bônus: Trabalho remoto não é sinônimo de home office&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O trabalho remoto vai além de estar em casa; trata-se de liberdade para trabalhar de qualquer lugar. Ele redefine como as equipes colaboram e se conectam, priorizando autonomia, flexibilidade e resultados. Seja em casa, em um café ou em outro país, o importante é encontrar um ambiente que funcione para você.&lt;/p&gt;

&lt;p&gt;Trabalhar remotamente é um processo de aprendizado e adaptação. Com o tempo, você e seu time podem desenvolver práticas mais eficientes e alinhadas às necessidades de todos. E você, já experimentou o trabalho remoto? Compartilhe suas experiências e ideias para continuarmos aprendendo juntos!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feliz trabalho remoto \o/&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;/p&gt;

&lt;p&gt;✨ Conheça a Comunidade Nomadz  ✨&lt;br&gt;
👉🏻 &lt;a href="https://www.patreon.com/nomadz/membership" rel="noopener noreferrer"&gt;https://www.patreon.com/nomadz/membership&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quer falar comigo? Tô por aqui:&lt;br&gt;
&lt;a href="https://instagram.com/lincoli.xavier" rel="noopener noreferrer"&gt;https://instagram.com/lincoli.xavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lincoli.xavier" rel="noopener noreferrer"&gt;https://www.tiktok.com/@lincoli.xavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lincolixavier" rel="noopener noreferrer"&gt;https://twitter.com/lincolixavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtube.com/@lincoli.xavier/" rel="noopener noreferrer"&gt;https://youtube.com/@lincoli.xavier/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.lincolixavier.com/" rel="noopener noreferrer"&gt;https://www.lincolixavier.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>remote</category>
      <category>webdev</category>
      <category>career</category>
      <category>workplace</category>
    </item>
    <item>
      <title>What happens when you type a URL into the browser</title>
      <dc:creator>Lincoli Xavier</dc:creator>
      <pubDate>Mon, 18 Nov 2024 09:00:02 +0000</pubDate>
      <link>https://dev.to/lincolixavier/what-happens-when-you-type-a-url-into-the-browser-5fkk</link>
      <guid>https://dev.to/lincolixavier/what-happens-when-you-type-a-url-into-the-browser-5fkk</guid>
      <description>&lt;p&gt;When you type a URL into your browser and press Enter, a series of steps take place to load the requested web page. Here's a simplified breakdown of the process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;URL Parsing&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The browser parses the URL to determine the protocol (e.g., HTTP or HTTPS), the domain name, and the path to the resource.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DNS Lookup&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The browser checks its cache for the IP address of the domain. If it's not found, it queries a DNS (Domain Name System) server to translate the domain name into an IP address.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TCP/IP Connection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The browser establishes a TCP (Transmission Control Protocol) connection with the server using the IP address obtained from the DNS lookup. This involves a three-way handshake:

&lt;ol&gt;
&lt;li&gt;The browser sends a SYN (synchronize) packet to the server.&lt;/li&gt;
&lt;li&gt;The server responds with a SYN-ACK (synchronize-acknowledge) packet.&lt;/li&gt;
&lt;li&gt;The browser sends an ACK (acknowledge) packet back to the server.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;HTTP/HTTPS Request&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the URL uses HTTPS, the browser initiates a TLS (Transport Layer Security) handshake to establish a secure connection. This involves certificate verification and encryption key exchange.&lt;/li&gt;
&lt;li&gt;The browser then sends an HTTP or HTTPS request to the server, specifying the desired resource (e.g., a web page or file).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Server Processing&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The server receives the request, processes it, and locates the requested resource. It may involve fetching data from a database or executing server-side scripts.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;HTTP/HTTPS Response&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The server sends an HTTP or HTTPS response back to the browser. This response includes status codes (e.g., 200 OK, 404 Not Found) and the requested resource (e.g., HTML, CSS, JavaScript, images).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Rendering&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The browser receives the response and begins rendering the web page. This involves several steps:

&lt;ul&gt;
&lt;li&gt;Parsing the HTML to construct the DOM (Document Object Model) tree.&lt;/li&gt;
&lt;li&gt;Parsing the CSS to apply styles and construct the CSSOM (CSS Object Model) tree.&lt;/li&gt;
&lt;li&gt;Parsing and executing JavaScript.&lt;/li&gt;
&lt;li&gt;Combining the DOM and CSSOM trees to create the render tree.&lt;/li&gt;
&lt;li&gt;Painting the render tree onto the screen.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Resource Loading&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As the browser parses the HTML, it may encounter additional resources (e.g., images, stylesheets, scripts) that need to be loaded. It sends additional HTTP/HTTPS requests to fetch these resources and updates the web page as they are received.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Interaction and Updates&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once the web page is loaded, the browser continues to handle user interactions (e.g., clicks, form submissions) and updates the page dynamically as needed (e.g., via AJAX requests).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;This entire process happens very quickly, typically within a fraction of a second, allowing users to access web pages almost instantaneously.&lt;/p&gt;

&lt;p&gt;.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;/p&gt;

&lt;p&gt;✨ My Nomad Community  ✨&lt;br&gt;
👉🏻 &lt;a href="https://www.patreon.com/nomadz/membership" rel="noopener noreferrer"&gt;https://www.patreon.com/nomadz/membership&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reach me out:&lt;br&gt;
&lt;a href="https://instagram.com/lincoli.xavier" rel="noopener noreferrer"&gt;https://instagram.com/lincoli.xavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lincoli.xavier" rel="noopener noreferrer"&gt;https://www.tiktok.com/@lincoli.xavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lincolixavier" rel="noopener noreferrer"&gt;https://twitter.com/lincolixavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtube.com/@lincoli.xavier/" rel="noopener noreferrer"&gt;https://youtube.com/@lincoli.xavier/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.lincolixavier.com/" rel="noopener noreferrer"&gt;https://www.lincolixavier.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>browser</category>
      <category>web</category>
    </item>
    <item>
      <title>Vamos falar das sombras na web: Shadow DOM</title>
      <dc:creator>Lincoli Xavier</dc:creator>
      <pubDate>Thu, 12 Sep 2024 15:46:32 +0000</pubDate>
      <link>https://dev.to/lincolixavier/vamos-falar-das-sombras-na-web-shadow-dom-1k39</link>
      <guid>https://dev.to/lincolixavier/vamos-falar-das-sombras-na-web-shadow-dom-1k39</guid>
      <description>&lt;p&gt;Quando pensamos em construir componentes web modernos, o &lt;strong&gt;Shadow DOM&lt;/strong&gt; se destaca como uma das tecnologias mais poderosas e promissoras. Ele permite que desenvolvedores criem componentes com estilos e comportamentos encapsulados, sem interferir nos demais elementos da página. O Shadow DOM não só traz modularidade para o código, como também previne aqueles famigerados conflitos de estilos que surgem quando tudo está no mesmo "balde" do DOM tradicional. &lt;/p&gt;

&lt;p&gt;A grande sacada do Shadow DOM é criar um isolamento quase perfeito entre a "shadow tree" e o resto do documento. Ou seja, o que acontece no Shadow DOM, fica no Shadow DOM. Estilos, scripts, tudo fica ali, separado, sem "vazar" para o restante do documento. Na teoria, isso é incrível para modularidade e organização do código. Por outro lado, esse isolamento pode complicar a vida de quem depende de tecnologias assistivas para navegar na web, afetando a acessibilidade =/&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Entendendo um pouco melhor alguns conceitos:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DOM&lt;/strong&gt;: uma estrutura em forma de árvore de nós conectados que representa os diferentes elementos e sequências de texto que aparecem em um documento HTML&lt;/p&gt;

&lt;p&gt;O Shadow DOM permite que árvores DOM ocultas sejam anexadas a elementos na árvore DOM regular — essa árvore DOM shadow começa com uma raiz shadow, abaixo da qual você pode anexar qualquer elemento, da mesma forma que o DOM normal.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Shadow host&lt;/strong&gt;: Um nó padrão do DOM onde o shadow DOM está anexado.&lt;br&gt;
&lt;strong&gt;Shadow tree&lt;/strong&gt;: Um DOM separado dentro do shadow host.&lt;br&gt;
&lt;strong&gt;Shadow boundary&lt;/strong&gt;: Basicamente onde shadow DOM termina e DOM padrão começa.&lt;br&gt;
&lt;strong&gt;Shadow root&lt;/strong&gt;: Raíz do shadow DOM.&lt;/p&gt;

&lt;p&gt;Pode parecer um pouco complicado, mas na prática, é uma maneira simples e eficaz de criar componentes com CSS e JavaScript isolados.&lt;/p&gt;

&lt;p&gt;O Shadow DOM é amplamente utilizado em interfaces web do dia a dia. Por exemplo, um player de vídeo numa página web usa Shadow DOM para isolar seus controles, como play, pause e o controle de volume. Graças ao padrão Shadow DOM, os estilos e scripts desses controles não interferem no restante da página.&lt;/p&gt;
&lt;h2&gt;
  
  
  Benefícios de Usar Shadow DOM
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Encapsulamento&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Quando falamos de encapsulamento no contexto do Shadow DOM, estamos nos referindo ao isolamento de CSS e JavaScript. Isso significa que os estilos e scripts dentro de um Shadow DOM são exclusivos daquele DOM e não interferem com o restante da página.&lt;/p&gt;

&lt;p&gt;Esse encapsulamento resolve o problema de &lt;strong&gt;vazamento de CSS&lt;/strong&gt;, onde estilos de uma parte da aplicação acabam afetando outra, causando problemas inesperados de layout. Com o Shadow DOM, você pode estilizar elementos sem se preocupar com conflitos de estilos em outras partes da página.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Independência&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Como o Shadow DOM está anexado a um elemento específico, ele forma um ambiente independente. Isso significa que o elemento e seu Shadow DOM podem ser desenvolvidos, testados e implementados separadamente do restante da aplicação.&lt;/p&gt;

&lt;p&gt;Essa independência facilita o gerenciamento de grandes aplicações. Os desenvolvedores podem trabalhar em componentes individuais, reduzindo a complexidade e aumentando a manutenibilidade da aplicação. Isso também melhora o desempenho, pois os navegadores podem otimizar o processo de renderização, atualizando apenas os componentes que realmente precisam.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reutilização&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Outro benefício importante que o Shadow DOM traz ao desenvolvimento web é a reutilização. Um componente construído com Shadow DOM encapsula todos os seus estilos e comportamentos necessários, tornando-se uma unidade autônoma. Isso significa que você pode reutilizar esse componente em diferentes partes da sua aplicação, ou até em aplicações diferentes.&lt;/p&gt;

&lt;p&gt;Essa capacidade de reutilização economiza tempo de desenvolvimento e garante consistência em toda a aplicação. Ao reutilizar componentes, você garante que cada instância se comporte e tenha a mesma aparência, proporcionando uma experiência de usuário consistente.&lt;/p&gt;
&lt;h2&gt;
  
  
  Vamos ver um exemplo
&lt;/h2&gt;

&lt;p&gt;Vamos criar uma página que contém dois elementos: uma lista desordenada &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; com o id "menu" e uma simples &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; com algum texto fora do Shadow DOM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"menu"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Este parágrafo não está no Shadow DOM&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui, vamos usar o elemento com o id "menu" como o &lt;strong&gt;shadow host&lt;/strong&gt;. Vamos chamar &lt;code&gt;attachShadow()&lt;/code&gt; no host para criar o Shadow DOM. A seguir, adicionamos nós ao Shadow DOM da mesma forma que faríamos no DOM principal. Neste exemplo, vamos adicionar uma lista &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; com dois itens &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;menu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#menu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;shadow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;menu&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;attachShadow&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;open&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ul&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ul&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;li1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;li&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;li1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Item 1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;li2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;li&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;li2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Item 2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;li1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;li2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado será uma lista renderizada dentro do Shadow DOM, encapsulada e isolada do restante da página, garantindo que seus estilos e comportamentos não interfiram no documento principal. Enquanto isso, o parágrafo fora do Shadow DOM permanece inalterado.&lt;/p&gt;

&lt;p&gt;O que aparece no DOM principal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Este parágrafo não está no Shadow DOM&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas dentro do &lt;strong&gt;shadow DOM&lt;/strong&gt;, temos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Item 1&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Item 2&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa abordagem permite que você crie componentes independentes, mantendo a consistência e o encapsulamento de estilos e comportamentos, sem afetar o restante da página.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tá, mas e no mundo real?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Imagine que você está criando um widget de calendário ou um player de vídeo que será reutilizado em várias partes da sua aplicação. Usar o Shadow DOM garante que os estilos do widget não sejam afetados pelos estilos globais da página e que as modificações feitas por outros desenvolvedores em diferentes seções do projeto não quebrem o funcionamento ou a aparência do componente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Em uma aplicação SPA (Single Page Application), onde múltiplos componentes estão sendo constantemente atualizados, o uso do Shadow DOM pode ajudar o navegador a focar apenas nos elementos que precisam ser renderizados novamente, evitando atualizações desnecessárias em outros componentes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Em uma aplicação que lida com informações sensíveis, como formulários de pagamento, o uso do Shadow DOM pode garantir que os elementos internos desses componentes estejam protegidos de manipulações externas maliciosas. Claro que todas as outras medidas de segurança precisam ser tomadas, como sanitizar conteúdo por ex.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Shadow DOM vs Virtual DOM
&lt;/h2&gt;

&lt;p&gt;Muitas vezes, os conceitos de Shadow DOM e Virtual DOM são discutidos juntos, o que leva a uma certa confusão sobre suas diferenças. Embora ambos estejam relacionados ao DOM, eles servem a propósitos diferentes e não são diretamente comparáveis.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Virtual DOM&lt;/strong&gt; é um conceito popularizado por bibliotecas como React. Ele é uma cópia leve do DOM real, onde as mudanças são feitas primeiro, antes de serem refletidas no DOM real. Esse processo, chamado de "reconciliação", otimiza o desempenho ao minimizar as manipulações do DOM.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Shadow DOM&lt;/strong&gt;, por outro lado, é um padrão web que encapsula estilos e marcação. Ele não está preocupado com otimizações de atualização do DOM, mas sim em isolar componentes para evitar conflitos de estilo e problemas de escopo global.&lt;/p&gt;

&lt;p&gt;Em essência, Shadow DOM e Virtual DOM têm propósitos diferentes. O Shadow DOM fornece encapsulamento de estilo e comportamento para componentes reutilizáveis, enquanto o Virtual DOM otimiza a renderização desses componentes, minimizando as atualizações no DOM real.&lt;/p&gt;

&lt;p&gt;Já tinha visto esse conceito? O que ficou em dúvida? Vamos discutir nos comentários :)&lt;/p&gt;

&lt;p&gt;Ref: &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_shadow_DOM" rel="noopener noreferrer"&gt;Doc MDN&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Obrigado por ler até aqui!&lt;/p&gt;

&lt;p&gt;.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;/p&gt;

&lt;p&gt;Quer falar comigo? Tô por aqui:&lt;br&gt;
&lt;a href="https://instagram.com/lincoli.xavier" rel="noopener noreferrer"&gt;https://instagram.com/lincoli.xavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lincoli.xavier" rel="noopener noreferrer"&gt;https://www.tiktok.com/@lincoli.xavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lincolixavier" rel="noopener noreferrer"&gt;https://twitter.com/lincolixavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtube.com/@lincoli.xavier/" rel="noopener noreferrer"&gt;https://youtube.com/@lincoli.xavier/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.lincolixavier.com/" rel="noopener noreferrer"&gt;https://www.lincolixavier.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>html</category>
      <category>learning</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Como conseguir seu primeiro freela</title>
      <dc:creator>Lincoli Xavier</dc:creator>
      <pubDate>Fri, 06 Sep 2024 14:55:27 +0000</pubDate>
      <link>https://dev.to/lincolixavier/como-conseguir-seu-primeiro-freela-d7h</link>
      <guid>https://dev.to/lincolixavier/como-conseguir-seu-primeiro-freela-d7h</guid>
      <description>&lt;p&gt;Conseguir seu primeiro trabalho freelance como desenvolvedor web pode ser difícil, especialmente se você está começando e ainda não tem um portfólio ou grandes contatos na área. No entanto, com a abordagem correta, esforço contínuo e persistência, você pode transformar essas dificuldades em oportunidades.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Olhe para os lados: Rede de contatos é fundamental
&lt;/h2&gt;

&lt;p&gt;A primeira dica crucial para quem está começando no mundo do freelancing é utilizar sua rede de contatos. Se você parar para pensar, é bem provável que você conheça alguém que poderia precisar de um site, ou que pelo menos conheça alguém que conheça outra pessoa com essa necessidade. &lt;/p&gt;

&lt;h3&gt;
  
  
  Como encontrar oportunidades:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conhece donos de negócios?&lt;/strong&gt;: Ofereça seus serviços diretamente para eles. Pense em todas as lojas, restaurantes, escritórios e pequenos negócios locais que poderiam se beneficiar de uma presença online profissional.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Peça ajuda aos seus amigos, parentes e colegas&lt;/strong&gt;: Caso você mesmo não conheça donos de negócios, pergunte aos seus conhecidos. Muitas vezes, eles podem te apresentar a alguém que está precisando exatamente do que você pode oferecer. Explique que você está começando e que seria uma ótima oportunidade para ambos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Contato direto com empresas locais&lt;/strong&gt;: Além das conexões pessoais, muitas cidades têm associações comerciais e catálogos de empresas, como o Sindisfac, que podem ser um excelente ponto de partida. Esses catálogos geralmente listam empresas locais que podem precisar de um site ou de uma melhoria em sua presença online.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A importância da persistência:
&lt;/h3&gt;

&lt;p&gt;Se você tentar com cinco ou dez empresas e não conseguir nada, não desanime. Tente com cinquenta, cem! Não é fácil, mas esse esforço vale muito a pena. O segredo do sucesso é a persistência, e, eventualmente, uma porta vai se abrir. Quando isso acontecer, a experiência que você adquirir e a visibilidade que ganhar podem gerar muitas outras oportunidades.&lt;/p&gt;

&lt;h3&gt;
  
  
  Um exemplo prático:
&lt;/h3&gt;

&lt;p&gt;Imagine que você ofereceu seus serviços para 100 empresas locais e apenas uma delas aceitou. Isso pode parecer desanimador no início, mas ao concluir esse primeiro projeto, você poderá usar seu trabalho como portfólio, compartilhá-lo nas redes sociais e com outros potenciais clientes. O efeito dominó começará aqui. &lt;/p&gt;

&lt;h2&gt;
  
  
  2. Estruturando sua oferta: Valor percebido
&lt;/h2&gt;

&lt;p&gt;Uma das principais questões que podem surgir ao abordar potenciais clientes é como apresentar sua oferta de forma atrativa. Uma dica importante é focar no &lt;strong&gt;valor que você pode entregar&lt;/strong&gt; e não apenas no custo do serviço. &lt;/p&gt;

&lt;h3&gt;
  
  
  Foco no valor:
&lt;/h3&gt;

&lt;p&gt;Em vez de apenas mencionar que você pode criar um site, demonstre como isso pode ajudar o cliente a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Aumentar a visibilidade online&lt;/strong&gt;: Um site bem feito pode melhorar a presença digital de um negócio, tornando-o mais acessível para potenciais clientes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gerar leads&lt;/strong&gt;: Explique que um site otimizado pode atrair mais clientes e, consequentemente, aumentar as vendas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Melhorar a reputação&lt;/strong&gt;: Empresas com sites profissionais transmitem uma imagem mais confiável e séria.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esses pontos de valor ajudam a convencer o cliente de que o investimento no seu trabalho será recompensado a longo prazo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apresentando a proposta:
&lt;/h3&gt;

&lt;p&gt;Seja claro e direto em sua proposta. Mostre que você tem um plano, uma metodologia de trabalho e que se preocupa com as necessidades específicas de cada cliente. Um exemplo de estrutura para sua proposta pode ser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Introdução&lt;/strong&gt;: Quem você é e o que você oferece.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entendimento do problema do cliente&lt;/strong&gt;: Personalize essa parte para cada cliente. Mostre que você compreende o desafio que ele enfrenta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solução&lt;/strong&gt;: Detalhe como você pretende resolver o problema, especificando as funcionalidades do site e os benefícios que trará.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preço&lt;/strong&gt;: Ofereça uma proposta de valor justa, mostrando que o investimento vale a pena.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essa ferramenta vai te ajudar a construir propostas sensacionais: &lt;a href="https://qwilr.com/" rel="noopener noreferrer"&gt;https://qwilr.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Começando pequeno: Projetos básicos para portfólio
&lt;/h2&gt;

&lt;p&gt;Se você ainda não tem um portfólio ou experiência anterior para apresentar, pode ser útil começar com projetos mais simples e de menor escala. Muitas vezes, donos de negócios locais precisam de algo básico, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Um site institucional para apresentar a empresa.&lt;/li&gt;
&lt;li&gt;Um blog para aumentar o alcance da marca.&lt;/li&gt;
&lt;li&gt;Uma loja virtual simples.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ao concluir esses projetos, você terá exemplos concretos para mostrar a outros potenciais clientes, aumentando sua credibilidade no mercado.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que incluir no portfólio:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Projetos pessoais&lt;/strong&gt;: Se você ainda não teve nenhum cliente, crie sites fictícios para empresas imaginárias. O importante aqui é mostrar suas habilidades técnicas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trabalhos voluntários&lt;/strong&gt;: Ofereça seus serviços para ONGs, associações de bairro ou pequenos negócios que estão começando.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aprimore seu próprio site&lt;/strong&gt;: Tenha um site pessoal bem estruturado, onde você possa exibir seus projetos e compartilhar artigos ou insights sobre tecnologia. Seu próprio site será muitas vezes o primeiro exemplo que potenciais clientes verão do seu trabalho.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Construa uma presença online
&lt;/h2&gt;

&lt;p&gt;Além de se conectar com empresas locais e utilizar sua rede de contatos, é fundamental que você invista na construção de uma presença online forte e consistente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Onde Estar:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn&lt;/strong&gt;: Construa um perfil profissional no LinkedIn, destacando suas habilidades como desenvolvedor web. Participe de grupos de discussões sobre tecnologia e freelancing, e compartilhe seus projetos e insights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redes sociais&lt;/strong&gt;: Utilize o Instagram, Facebook ou até mesmo o TikTok para divulgar seu trabalho. Você pode compartilhar exemplos de sites que criou, dar dicas sobre desenvolvimento web e se conectar com potenciais clientes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plataformas de freelancing&lt;/strong&gt;: Cadastrar-se em plataformas como Upwork, Contra, Crowd, Arc dev, Freelancer ou Fiverr também é uma boa estratégia. Embora a concorrência possa ser alta, você pode começar oferecendo serviços a preços mais acessíveis para ganhar avaliações e construir uma reputação.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  SEO Pessoal:
&lt;/h3&gt;

&lt;p&gt;Se você tem um site próprio, é interessante aprender e aplicar boas práticas de SEO (Search Engine Optimization) para aumentar as chances de ser encontrado por clientes quando eles pesquisarem por desenvolvedores web. Você pode criar conteúdos relevantes, como tutoriais e artigos, que posicionarão você como uma autoridade no assunto.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Não tenha medo de trabalhar de graça (No início)
&lt;/h2&gt;

&lt;p&gt;Às vezes, trabalhar de graça ou por um preço muito abaixo do mercado no início da sua carreira pode ser uma excelente estratégia para ganhar experiência e construir um portfólio. (Eu fiz isso algumas vezes e não me arrependo) O importante aqui é selecionar bem esses projetos. &lt;/p&gt;

&lt;h3&gt;
  
  
  Quando é vantajoso trabalhar de graça?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Projetos que agregarão valor ao seu portfólio&lt;/strong&gt;: Escolha projetos que desafiem você e que possam impressionar futuros clientes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parcerias estratégicas&lt;/strong&gt;: Trabalhar para uma ONG ou uma startup pode render ótimos contatos e oportunidades no futuro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trabalhos que ofereçam visibilidade&lt;/strong&gt;: Se o projeto é para um cliente que tem muita visibilidade em seu nicho, isso pode gerar uma boa divulgação do seu trabalho.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. A importância da reputação e do networking
&lt;/h2&gt;

&lt;p&gt;No mundo do freelancing, sua reputação é seu maior ativo. Clientes satisfeitos tendem a recomendá-lo para outros. Por isso, além de entregar trabalhos de qualidade, foque em construir relacionamentos sólidos com seus clientes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Como conquistar recomendação:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Entrega dentro do prazo&lt;/strong&gt;: Seja pontual e sempre cumpra seus prazos, ou avise com antecedência se houver imprevistos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comunicação clara&lt;/strong&gt;: Mantenha seu cliente informado sobre o andamento do projeto e esteja disponível para responder a dúvidas ou resolver problemas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exceda as expectativas&lt;/strong&gt;: Sempre que possível, ofereça algo extra. Isso pode ser uma funcionalidade adicional, uma sugestão de melhoria ou até mesmo um tutorial para que o cliente consiga gerenciar o site por conta própria.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Conclusão
&lt;/h2&gt;

&lt;p&gt;Conseguir seu primeiro freela como desenvolvedor web pode ser um desafio, mas com a estratégia certa, é totalmente possível. A chave está em usar sua rede de contatos, oferecer valor aos clientes e ser persistente. Ao aplicar essas dicas, você estará um passo mais perto de conquistar seu espaço no mercado de freelancing e construir uma carreira de sucesso.&lt;/p&gt;

&lt;p&gt;O mais importante é não desistir: lembre-se de que, mesmo que pareça difícil no começo, o esforço valerá a pena quando as primeiras portas se abrirem, e novas oportunidades surgirem!&lt;/p&gt;

&lt;p&gt;Obrigado por ler até aqui!&lt;/p&gt;

&lt;p&gt;Se quiser trocar ideia, tô por aqui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/lincolixavier" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://instagram.com/lincoli.xavier" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tiktok.com/@lincoli.xavier" rel="noopener noreferrer"&gt;TikTok&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtube.com/@lincoli.xavier/" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.lincolixavier.com/" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>freelancer</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Dominando os Utility Types do TypeScript</title>
      <dc:creator>Lincoli Xavier</dc:creator>
      <pubDate>Thu, 18 Jul 2024 17:45:23 +0000</pubDate>
      <link>https://dev.to/lincolixavier/dominando-os-utility-types-do-typescript-3gm4</link>
      <guid>https://dev.to/lincolixavier/dominando-os-utility-types-do-typescript-3gm4</guid>
      <description>&lt;p&gt;Se você está navegando no universo TypeScript e ainda não explorou os poderosos Utility Types, prepare-se para se surpreender! Os Utility Types transformam seu código TypeScript, tornando-o mais limpo, seguro e eficiente. Vamos explorar esses tipos e ver como eles podem facilitar sua vida de desenvolvedor.&lt;/p&gt;

&lt;h2&gt;
  
  
  O Básico: O que são Utility Types?
&lt;/h2&gt;

&lt;p&gt;Os Utility Types são tipos genéricos fornecidos pelo TypeScript que permitem transformar outros tipos de maneira prática e útil. Eles ajudam a simplificar o código, garantindo que ele seja mais robusto e menos propenso a erros. Vamos mergulhar em alguns dos utility types mais comuns e ver exemplos práticos de como usá-los.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Partial 🧩
&lt;/h3&gt;

&lt;p&gt;Imagine que você tem uma interface &lt;code&gt;User&lt;/code&gt; e deseja criar uma função que atualize os dados do usuário, mas sem a necessidade de passar todas as propriedades. O &lt;code&gt;Partial&lt;/code&gt; é a solução!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;updateUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Partial&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Agora é possível passar apenas algumas propriedades&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nf"&gt;updateUser&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;// Válido&lt;/span&gt;
&lt;span class="nf"&gt;updateUser&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;       &lt;span class="c1"&gt;// Válido&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Required ✔️
&lt;/h3&gt;

&lt;p&gt;Às vezes, você precisa garantir que todas as propriedades de um tipo sejam obrigatórias. É aqui que o &lt;code&gt;Required&lt;/code&gt; entra em cena.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Required&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Agora todas as propriedades de User são obrigatórias&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nf"&gt;createUser&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sibelius&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;29&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Readonly 🔒
&lt;/h3&gt;

&lt;p&gt;Precisa garantir que as propriedades de um objeto não sejam modificadas? Use o &lt;code&gt;Readonly&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Readonly&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Readonly&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Yaya&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Erro: Cannot assign to 'id' because it is a read-only property.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Pick 🎯
&lt;/h3&gt;

&lt;p&gt;Quer criar um tipo com apenas algumas propriedades de outro tipo? O &lt;code&gt;Pick&lt;/code&gt; é perfeito para isso.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;UserIdAndName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Pick&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;UserIdAndName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Yaya&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// Válido&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Omit 🚫
&lt;/h3&gt;

&lt;p&gt;Precisa excluir algumas propriedades de um tipo? O &lt;code&gt;Omit&lt;/code&gt; é a ferramenta certa.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;UserWithoutAge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Omit&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;UserWithoutAge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Yaya&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// Válido&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Record 📚
&lt;/h3&gt;

&lt;p&gt;Quer criar um objeto onde cada chave tem um tipo específico? Use o &lt;code&gt;Record&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;guest&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;roles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Role&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;guest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7. Exclude 🔍
&lt;/h3&gt;

&lt;p&gt;O &lt;code&gt;Exclude&lt;/code&gt; é útil quando você precisa criar um tipo excluindo alguns membros de uma união.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ExcludeB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Exclude&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// "a" | "c"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8. Extract 🕵️
&lt;/h3&gt;

&lt;p&gt;O &lt;code&gt;Extract&lt;/code&gt; permite criar um tipo extraindo membros de uma união.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;c&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ExtractA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Extract&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// "a" | "b"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  9. NonNullable 🚫 null/undefined
&lt;/h3&gt;

&lt;p&gt;Quer remover &lt;code&gt;null&lt;/code&gt; e &lt;code&gt;undefined&lt;/code&gt; de um tipo? Use o &lt;code&gt;NonNullable&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;NonNullableT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;NonNullable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Colocando Tudo em Prática
&lt;/h2&gt;

&lt;p&gt;Vamos ver um exemplo prático que utiliza vários desses utility types para construir uma aplicação robusta e segura.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Atualiza um usuário aceitando apenas algumas propriedades&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;updateUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Partial&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Código para atualizar o usuário&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User updated:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Função que cria um usuário garantindo que todas as propriedades estejam presentes&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Required&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User created:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Exibe os dados do usuário, sem permitir modificações&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;printUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Readonly&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// user.id = 2; // Erro: Cannot assign to 'id' because it is a read-only property.&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Atualizando usuário com propriedades parciais&lt;/span&gt;
&lt;span class="nf"&gt;updateUser&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lincolixavier@zoho.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Criando um usuário com todas as propriedades obrigatórias&lt;/span&gt;
&lt;span class="nf"&gt;createUser&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Zidane&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;zidane@zoho.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Exibindo dados do usuário, sem modificá-los&lt;/span&gt;
&lt;span class="nf"&gt;printUser&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Carlos&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo, utilizamos &lt;code&gt;Partial&lt;/code&gt;, &lt;code&gt;Required&lt;/code&gt; e &lt;code&gt;Readonly&lt;/code&gt; para diferentes funções que manipulam um objeto &lt;code&gt;User&lt;/code&gt;. Cada função tem requisitos específicos para o tipo de objeto que aceita, garantindo flexibilidade e segurança.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dicas Práticas
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Combine Utility Types&lt;/strong&gt;: Não hesite em combinar utility types para criar tipos complexos que atendam às suas necessidades. Por exemplo, você pode combinar &lt;code&gt;Partial&lt;/code&gt; com &lt;code&gt;Pick&lt;/code&gt; para criar um tipo com propriedades opcionais específicas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Documente Seu Código&lt;/strong&gt;: Utility types podem tornar o código mais difícil de entender à primeira vista. Adicione comentários claros para explicar o que cada tipo está fazendo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use Utility Types para Refatoração&lt;/strong&gt;: Ao refatorar seu código, os utility types podem ajudar a garantir que você não quebre nenhuma parte do sistema, especialmente quando você está lidando com objetos grandes e complexos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Experimente e Teste&lt;/strong&gt;: Não tenha medo de experimentar diferentes utility types e ver como eles podem simplificar seu código. Use testes para garantir que as transformações de tipos estão funcionando como esperado.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Os Utility Types do TypeScript são ferramentas poderosas que podem transformar a maneira como você escreve e mantém seu código. Ao usá-los de forma inteligente, você pode criar aplicações mais robustas, seguras e fáceis de manter. Então explore, experimente e aproveite a mágica dos Utility Types!&lt;/p&gt;




&lt;p&gt;Gostou do artigo? Comente quais utility types você mais usa ou quer começar a usar!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Que a Tipagem Estática esteja com você&lt;/strong&gt; 💪&lt;/p&gt;

&lt;p&gt;Referência: &lt;a href="https://www.typescriptlang.org/docs/handbook/utility-types.html" rel="noopener noreferrer"&gt;TypeScript Handbook&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;✨ Conheça a Comunidade Nomadz ✨&lt;br&gt;
👉🏻 &lt;a href="https://www.patreon.com/nomadz/membership" rel="noopener noreferrer"&gt;Patreon&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quer falar comigo? Tô por aqui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://instagram.com/lincoli.xavier" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tiktok.com/@lincoli.xavier" rel="noopener noreferrer"&gt;TikTok&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/lincolixavier" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtube.com/@lincoli.xavier/" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.lincolixavier.com/" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>typescript</category>
      <category>development</category>
      <category>career</category>
      <category>ts</category>
    </item>
    <item>
      <title>9 Web API's que fazem mágica ⚡🧙🏻‍♀️🧙🏾‍♂️✨</title>
      <dc:creator>Lincoli Xavier</dc:creator>
      <pubDate>Thu, 28 Mar 2024 18:01:42 +0000</pubDate>
      <link>https://dev.to/lincolixavier/9-web-apis-que-fazem-magica-3aj9</link>
      <guid>https://dev.to/lincolixavier/9-web-apis-que-fazem-magica-3aj9</guid>
      <description>&lt;p&gt;&lt;em&gt;Se voltássemos no tempo uns 20 anos, ou até menos, e falássemos para os desenvolvedores web daquela época o que os navegadores conseguem fazer hoje, definitivamente não acreditariam. Olhando em perspectiva o que os browsers fazem hoje com certeza garantiriam a entrada do Chrome, Firefox, Edge e outros em Hogwarts. Sabemos também quem ficaria de fora 👀 (aqueles que não devem ser mencionados IE/Safari)&lt;br&gt;
Vamos dar um panorama de algumas Web Api's que fazem verdadeiras mágicas, especialmente em dispositivos móveis.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Ambient Light Events 💡&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quando o sensor de luz de um dispositivo detecta uma mudança no nível de luz, ele notifica o navegador dessa mudança. Imagine o que dá pra fazer com fotografias, ambientes escuros ou contrastes de acessibilidade Instantâneos!&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ondevicelight&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;devicelight&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;darklight&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;brightlight&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;brightlight&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
          &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;darklight&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;devicelight event not supported&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Compatibilidade - Firefox, Firefox Android&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Web Bluetooth API 📲&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;E se eu lhe dissesse que os sites podem se comunicar com dispositivos Bluetooth próximos de maneira segura e preservando a privacidade? Dessa forma, monitores de frequência cardíaca, medidores de glicemia, e muito mais poderiam interagir diretamente com um site.&lt;/p&gt;

&lt;p&gt;Até agora, a capacidade de interagir com dispositivos Bluetooth só era possível para aplicativos específicos da plataforma. A API Web Bluetooth pretende mudar isso e trazê-lo também para navegadores da web.&lt;/p&gt;

&lt;p&gt;Como recurso de segurança, a descoberta de dispositivos Bluetooth com navigator.bluetooth.requestDevice deve ser acionada por uma ação do usuário, como um toque ou clique do mouse. Estamos falando sobre ouvir eventos pointerup, click e touchend.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Compatibilidade - Chrome, Edge, Opera, Chrome Android, Opera Android, Samsung Internet&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pointerup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Call navigator.bluetooth.requestDevice&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assim você consegue acessar as informações de bateria por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;onButtonClick&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Requesting Bluetooth Device...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;device&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bluetooth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requestDevice&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;battery_service&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]}]});&lt;/span&gt;

    &lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Connecting to GATT Server...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;device&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gatt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Getting Battery Service...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;service&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getPrimaryService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;battery_service&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Getting Battery Level Characteristic...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;characteristic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getCharacteristic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;battery_level&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Reading Battery Level...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;characteristic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readValue&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt; Battery Level is &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getUint8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Argh! &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E outras dezenas de opções estão disponíveis!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Broadcast Channel API 🛰️&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Compartilhando de informações entre janelas, tabs, iframes etc, quem já teve problema em precisar integrar esse tipo de comunicação, essa api é salvação.&lt;/p&gt;

&lt;p&gt;Tente fazer login em um de seus sites favoritos. Em seguida, abra o mesmo site em uma guia separada. Normalmente você estará logado em ambas as páginas. Em seguida, saia em uma de suas guias. Na maioria dos sites, parecerá que você está conectado em uma página e desconectado na outra.&lt;/p&gt;

&lt;p&gt;Suas janelas estão em estados diferentes: conectado ou desconectado. Isso não é ótimo e se você é um tabber maníaco (como eu), pode causar alguma confusão.&lt;/p&gt;

&lt;p&gt;Isso pode até ser um problema de segurança. Imagine que seu usuário está em uma cafeteria usando o painel da empresa. Ele sai para ir ao banheiro e deixa o computador ligado. Se a aplicação fosse aberta em múltiplas abas seria possível acessar os dados disponíveis nas demais abas (na tela ou talvez algum token JWT).&lt;/p&gt;

&lt;p&gt;Compatibilidade - Chrome, Edge, Firefox, Opera, WebView Android, Chrome Android, Opera Android, Samsung Internet&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Contact Picker API 👥👥&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Você tem acesso aos contatos do telefone via browser (: Usar informações como nome, email, telefone, endereço e ícone se estiverem disponíveis, a aplicabilidade disso é quase infinita.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Compatibilidade - Opera, WebView Android, Chrome Android, Opera Android, Samsung Internet&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Web Video Text Tracks Format (WebVTT) 🔠&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Outra grande amiga da acessibilidade, quer colocar legenda nos seus vídeos? usando a tag &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt; ? É possível customizar via css as legendas também. Vai fundo nessa lindeza =D&lt;/p&gt;

&lt;p&gt;Exemplo:track.vtt&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;01.000&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;04.000&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;Never&lt;/span&gt; &lt;span class="nx"&gt;drink&lt;/span&gt; &lt;span class="nx"&gt;liquid&lt;/span&gt; &lt;span class="nx"&gt;nitrogen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;05.000&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;09.000&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;It&lt;/span&gt; &lt;span class="nx"&gt;will&lt;/span&gt; &lt;span class="nx"&gt;perforate&lt;/span&gt; &lt;span class="nx"&gt;your&lt;/span&gt; &lt;span class="nx"&gt;stomach&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;You&lt;/span&gt; &lt;span class="nx"&gt;could&lt;/span&gt; &lt;span class="nx"&gt;die&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;video&lt;/span&gt; &lt;span class="nx"&gt;controls&lt;/span&gt; &lt;span class="nx"&gt;autoplay&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;video.webm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;track&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;track.vtt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/video&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Compatibilidade - Todos os browsers modernos&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. The WebSocket API 🔁&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O protocolo Websocket é uma tecnologia que permite comunicação bidirecional e conexão persistente entre servidores e clientes&lt;/p&gt;

&lt;p&gt;Ele oferece uma conexão única e de longa duração que é uma alternativa mais eficiente ao HTTP (apesar que o handshake, pra realizar a conexão em si é http) para aplicativos da web em tempo real.&lt;/p&gt;

&lt;p&gt;Essa é uma verdadeira mágica! Com essa API, você pode enviar mensagens a um servidor e receber respostas orientadas a eventos sem precisar consultar o servidor para obter uma resposta. Realtime meus amigos &amp;lt;3&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Compatibilidade - Todos os browsers modernos&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Screen Capture API 🖥️&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A mágica do print e da gravação de tela! Com essa API, sites e aplicativos na web podem gravar facilmente uma aba do navegador, uma janela específica ou até mesmo a tela inteira de um usuário. Super simples de usar!&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;startCapture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;displayMediaOptions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;captureStream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;captureStream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mediaDevices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDisplayMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;displayMediaOptions&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Error: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;captureStream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Compatibilidade - Chrome, Edge, Firefox, Opera, Safari&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Proximity Events 🤳&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Essa API define eventos que fornecem informações sobre a distância entre um dispositivo e um objeto, medida por um sensor de proximidade. Inicialmente fazia parte da API Sensor, posteriormente dividida e se tornou uma API independente. As especificações da API Proximity são consideradas estáveis porque atingiu o status de Recomendação Candidata do W3C em 1º de outubro de 2013.&lt;/p&gt;

&lt;p&gt;Se você já teve ou usou um smartphone, o que presumo que já tenha, você já viu essa API em ação :)&lt;/p&gt;

&lt;p&gt;Quer um exemplo? Pense em sua última ligação e no que você fez. Você desbloqueou seu smartphone, digitou o número para o qual deseja ligar e tocou no botão “Ligar”. Feito isso, você colocou o smartphone próximo ao ouvido e de repente algo mágico aconteceu, a tela desligou.&lt;/p&gt;

&lt;p&gt;Bem intuitiva a implementação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;userproximity&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;near&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// let's power off the screen&lt;/span&gt;
      &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mozPower&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;screenEnabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// Otherwise, let's power on the screen&lt;/span&gt;
      &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mozPower&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;screenEnabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compatibilidade - Firefox, Firefox Android&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Picture-in-Picture API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Comum no whatsapp, facebook, youtube. Essa API permite criar o vídeo flutuante em cima de outras janelas para que os usuários possam continuar a consumir mídia enquanto interagem com outros sites de conteúdo ou aplicativos em seus dispositivos.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Compatibilidade - Chrome, Edge, Opera, Safari, iOS Safari&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;E tem muito mais! São 77 API's com capacidades incríveis. Cada uma merece um artigo dedicado, vale a pena conferir e brincar com elas.&lt;/p&gt;

&lt;p&gt;Gostou? Comenta o que é mais interessante pra ti? Qual API dessas já usou ou quer usar?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Que a Magia esteja com você&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Fonte: &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API"&gt;MDN web docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;br&gt;
.&lt;/p&gt;

&lt;p&gt;✨ Conheça a Comunidade Nomadz  ✨&lt;br&gt;
👉🏻 &lt;a href="https://www.patreon.com/nomadz/membership"&gt;https://www.patreon.com/nomadz/membership&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quer falar comigo? Tô por aqui:&lt;br&gt;
&lt;a href="https://instagram.com/lincoli.xavier"&gt;https://instagram.com/lincoli.xavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tiktok.com/@lincoli.xavier"&gt;https://www.tiktok.com/@lincoli.xavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/lincolixavier"&gt;https://twitter.com/lincolixavier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtube.com/@lincoli.xavier/"&gt;https://youtube.com/@lincoli.xavier/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.lincolixavier.com/"&gt;https://www.lincolixavier.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webapis</category>
      <category>api</category>
      <category>webde</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
