<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Frontend on Tiago Costa</title>
    <link>https://tiagoscosta.tpps.com.br/categories/frontend/</link>
    <description>Recent content in Frontend on Tiago Costa</description>
    <generator>Hugo</generator>
    <language>pt-br</language>
    <lastBuildDate>Sun, 08 Feb 2026 15:13:00 +0000</lastBuildDate>
    <atom:link href="https://tiagoscosta.tpps.com.br/categories/frontend/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>📝 Protegendo sua Aplicação Angular 18 com Firebase App Check e reCAPTCHA v3 (Guia Completo)</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-protegendo-sua-aplica%C3%A7%C3%A3o-angular-18-com-firebase-app-check-e-recaptcha-v3-guia-completo/</link>
      <pubDate>Sun, 08 Feb 2026 15:13:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-protegendo-sua-aplica%C3%A7%C3%A3o-angular-18-com-firebase-app-check-e-recaptcha-v3-guia-completo/</guid>
      <description>&lt;p&gt;Se você utiliza o &lt;strong&gt;Firebase&lt;/strong&gt; como backend, sabe que a segurança é uma via de mão dupla. Não basta apenas ter boas regras no Firestore; é preciso garantir que apenas o &lt;strong&gt;seu&lt;/strong&gt; aplicativo acesse seus recursos. Neste guia, vamos aprender como implementar o App Check com reCAPTCHA &lt;strong&gt;v3&lt;/strong&gt; em um projeto &lt;strong&gt;Angular 18&lt;/strong&gt; utilizando &lt;strong&gt;NgModules&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-o-que-é-o-app-check&#34;&gt;&#xA;  1. O que é o App Check?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-que-%c3%a9-o-app-check&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O Firebase App Check é uma camada de segurança que ajuda a proteger seus serviços na nuvem (Firestore, Realtime Database, Cloud Storage) verificando se o tráfego vem de um aplicativo legítimo e bloqueando o tráfego sem credenciais válidas.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Estratégias de Otimização: Como &#34;Emagrecer&#34; seu App Angular com Bundle Analyzer</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-estrat%C3%A9gias-de-otimiza%C3%A7%C3%A3o-como-emagrecer-seu-app-angular-com-bundle-analyzer/</link>
      <pubDate>Sat, 07 Feb 2026 10:09:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-estrat%C3%A9gias-de-otimiza%C3%A7%C3%A3o-como-emagrecer-seu-app-angular-com-bundle-analyzer/</guid>
      <description>&lt;p&gt;No desenvolvimento de aplicações modernas, é fácil perder o controle do tamanho do pacote final. Bibliotecas que prometem facilitar nossa vida podem, silenciosamente, inflar o main.js, prejudicando a experiência do usuário, especialmente em conexões móveis.&lt;/p&gt;&#xA;&lt;p&gt;Recentemente, ao analisar o build do um projeto, identificamos um pacote inicial de &lt;strong&gt;1.45&lt;/strong&gt; MB. Através do &lt;strong&gt;Webpack Bundle Analyzer&lt;/strong&gt;, conseguimos visualizar os &amp;ldquo;vilões&amp;rdquo; da performance e traçar um plano de ação.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-passo-a-passo-como-instalar-e-usar-o-analisador&#34;&gt;&#xA;  🛠️ Passo a Passo: Como instalar e usar o Analisador&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#-passo-a-passo-como-instalar-e-usar-o-analisador&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Para realizar esse &amp;ldquo;raio-X&amp;rdquo; na sua própria aplicação, siga estes passos:&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Transformando seu App Angular 16 em um PWA: Guia Prático com Foco em UX</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-transformando-seu-app-angular-16-em-um-pwa-guia-pr%C3%A1tico-com-foco-em-ux/</link>
      <pubDate>Wed, 04 Feb 2026 18:25:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-transformando-seu-app-angular-16-em-um-pwa-guia-pr%C3%A1tico-com-foco-em-ux/</guid>
      <description>&lt;p&gt;Ter uma aplicação web é ótimo, mas permitir que o usuário a instale no smartphone como se fosse um app nativo eleva o nível da experiência (UX). Neste artigo, vamos explorar como converter um projeto Angular 16 em um &lt;strong&gt;Progressive Web App (PWA)&lt;/strong&gt;, superando desafios comuns de dependências e cache.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-por-que-pwa&#34;&gt;&#xA;  1. Por que PWA?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-por-que-pwa&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Diferente de apps nativos, o PWA não precisa de lojas (Play Store/App Store) para ser instalado. Ele oferece:&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Como Gerenciar Scripts de Anúncios e Evitar Erros de ViewChild no Angular</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-como-gerenciar-scripts-de-an%C3%BAncios-e-evitar-erros-de-viewchild-no-angular/</link>
      <pubDate>Thu, 29 Jan 2026 16:22:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-como-gerenciar-scripts-de-an%C3%BAncios-e-evitar-erros-de-viewchild-no-angular/</guid>
      <description>&lt;p&gt;Ao desenvolver aplicações que utilizam redes de anúncios ou scripts externos (como Adsterra, AdSense ou widgets de terceiros), é comum enfrentarmos dois desafios: o bloqueio por antivírus/adblocks durante demonstrações profissionais (como em processos seletivos) e erros de execução no ciclo de vida do Angular quando tentamos esconder esses elementos.&lt;/p&gt;&#xA;&lt;p&gt;Neste artigo, exploraremos como criar um serviço de injeção dinâmica e como tratar o erro &lt;code&gt;TypeError: Cannot read properties of undefined (reading &#39;nativeElement&#39;)&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Como Criar e Configurar Subdomínios no Registro.br e Firebase Hosting</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-como-criar-e-configurar-subdom%C3%ADnios-no-registro-br-e-firebase-hosting/</link>
      <pubDate>Mon, 26 Jan 2026 16:19:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-como-criar-e-configurar-subdom%C3%ADnios-no-registro-br-e-firebase-hosting/</guid>
      <description>&lt;p&gt;Ter um domínio principal (como seudominio.com.br) permite que você organize diferentes aplicações através de subdomínios. Se você utiliza o Firebase Hosting, este é o guia completo.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-configuração-no-firebase-console&#34;&gt;&#xA;  1. Configuração no Firebase Console&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-configura%c3%a7%c3%a3o-no-firebase-console&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O Firebase precisa validar que você é o proprietário do subdomínio:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;No &lt;strong&gt;Firebase Console&lt;/strong&gt;, vá em &lt;strong&gt;Hosting &amp;gt; Adicionar domínio personalizado&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Insira o endereço completo (ex: &lt;code&gt;suaaplicacao.seudominio.com.br&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;O Firebase fornecerá um registro &lt;strong&gt;CNAME&lt;/strong&gt; (ou registros &lt;strong&gt;A&lt;/strong&gt; e &lt;strong&gt;TXT&lt;/strong&gt;). Copie esses valores.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-configuração-no-registrobr&#34;&gt;&#xA;  2. Configuração no Registro.br&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#2-configura%c3%a7%c3%a3o-no-registrobr&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Agora, aponte o subdomínio para os servidores do Google:&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Como Configurar Domínio do Registro.br no Firebase Hosting</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-como-configurar-dom%C3%ADnio-do-registro-br-no-firebase-hosting/</link>
      <pubDate>Fri, 23 Jan 2026 14:17:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-como-configurar-dom%C3%ADnio-do-registro-br-no-firebase-hosting/</guid>
      <description>&lt;p&gt;Ter um domínio próprio é essencial para passar credibilidade aos usuários e para a aprovação em redes de anúncios como o Adsterra. Siga este passo a passo para realizar a integração.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-iniciando-a-configuração-no-firebase&#34;&gt;&#xA;  1. Iniciando a Configuração no Firebase&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-iniciando-a-configura%c3%a7%c3%a3o-no-firebase&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Antes de mexer no Registro.br, você precisa avisar ao Firebase qual domínio deseja usar.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Acesse o &lt;strong&gt;Console do Firebase&lt;/strong&gt; e entre no seu projeto.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Como Monetizar sua Aplicação Angular com Adsterra: O Guia Completo</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-como-monetizar-sua-aplica%C3%A7%C3%A3o-angular-com-adsterra-o-guia-completo/</link>
      <pubDate>Thu, 22 Jan 2026 18:06:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-como-monetizar-sua-aplica%C3%A7%C3%A3o-angular-com-adsterra-o-guia-completo/</guid>
      <description>&lt;p&gt;Integrar anúncios em aplicações Angular exige uma abordagem diferente de sites estáticos. Como o Angular não recarrega a página inteira durante a navegação, precisamos de técnicas específicas para garantir que os anúncios sejam exibidos corretamente. Abaixo, mostramos como implementar dois dos formatos mais rentáveis: o &lt;strong&gt;Banner&lt;/strong&gt; e o &lt;strong&gt;Social Bar&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-banner-estático-vs-social-bar-qual-escolher&#34;&gt;&#xA;  1. Banner Estático vs. Social Bar: Qual escolher?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-banner-est%c3%a1tico-vs-social-bar-qual-escolher&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Para aplicações como jogos de bingo ou ferramentas interativas, a escolha do formato impacta diretamente a experiência do usuário (UX) e o faturamento (CPM).&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Aplicação Web: Transformando seu Site em um App com PWA</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-aplica%C3%A7%C3%A3o-web-transformando-seu-site-em-um-app-com-pwa/</link>
      <pubDate>Tue, 20 Jan 2026 17:48:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-aplica%C3%A7%C3%A3o-web-transformando-seu-site-em-um-app-com-pwa/</guid>
      <description>&lt;p&gt;O que diferencia uma ferramenta web comum de uma plataforma que os usuários utilizam recorrentemente? A resposta está na &lt;strong&gt;acessibilidade&lt;/strong&gt; e na &lt;strong&gt;experiência do usuário (UX)&lt;/strong&gt;. Ao implementar tecnologias de &lt;strong&gt;PWA (Progressive Web App)&lt;/strong&gt;, a sua aplicação deixa de ser apenas uma URL e passa a se comportar como um aplicativo nativo instalado no celular.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-que-é-um-pwa&#34;&gt;&#xA;  1. O que é um PWA?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-que-%c3%a9-um-pwa&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Um Progressive Web App é um conjunto de tecnologias que permitem que um site ofereça funcionalidades antes exclusivas de aplicativos baixados na App Store ou Google Play.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Maximizando o Engajamento: O Guia de Open Graph Tags para Angular</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-maximizando-o-engajamento-o-guia-de-open-graph-tags-para-angular/</link>
      <pubDate>Tue, 20 Jan 2026 17:28:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-maximizando-o-engajamento-o-guia-de-open-graph-tags-para-angular/</guid>
      <description>&lt;p&gt;Quando compartilhamos um link no WhatsApp, Facebook ou Slack, esperamos ver uma prévia atraente com título, descrição e imagem. No entanto, sem a configuração correta das &lt;strong&gt;Open Graph Tags&lt;/strong&gt;, essas plataformas exibem apenas uma URL seca ou informações genéricas.&lt;/p&gt;&#xA;&lt;p&gt;Este artigo explica como configurar essas tags no seu projeto Angular para garantir que &lt;strong&gt;sua aplicação&lt;/strong&gt; tenha uma presença visual impecável.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-que-são-open-graph-tags&#34;&gt;&#xA;  1. O que são Open Graph Tags?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-que-s%c3%a3o-open-graph-tags&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Criadas originalmente pelo Facebook, as tags Open Graph (OG) são meta tags inseridas no &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; do HTML que permitem que qualquer página da web se torne um &amp;ldquo;objeto rico&amp;rdquo; em redes sociais. Elas dizem aos rastreadores (crawlers) exatamente o que exibir.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Guia Definitivo: Build e Deploy de Aplicações Angular no Firebase</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-guia-definitivo-build-e-deploy-de-aplica%C3%A7%C3%B5es-angular-no-firebase/</link>
      <pubDate>Tue, 20 Jan 2026 16:26:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-guia-definitivo-build-e-deploy-de-aplica%C3%A7%C3%B5es-angular-no-firebase/</guid>
      <description>&lt;p&gt;Este guia detalha o processo de transformação de um ambiente de desenvolvimento Angular em um produto de produção hospedado no Firebase, garantindo suporte a &lt;strong&gt;Single Page Applications (SPA)&lt;/strong&gt;, conformidade com arquivos de publicidade (&lt;strong&gt;ads.txt&lt;/strong&gt;) e segurança via &lt;strong&gt;HTTPS&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-preparação-da-infraestrutura&#34;&gt;&#xA;  1. Preparação da Infraestrutura&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-prepara%c3%a7%c3%a3o-da-infraestrutura&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Antes de enviar os arquivos, é necessário preparar o terreno no Firebase.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Console do Firebase:&lt;/strong&gt; Crie um novo projeto no &lt;!-- raw HTML omitted --&gt;Firebase Console&lt;!-- raw HTML omitted --&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CLI Tools:&lt;/strong&gt; Instale as ferramentas de linha de comando no seu terminal:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;npm install -g firebase-tools&#xA;firebase login&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Firestore TTL: Como Automatizar a Exclusão de Dados em Aplicações Angular</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-firestore-ttl-como-automatizar-a-exclus%C3%A3o-de-dados-em-aplica%C3%A7%C3%B5es-angular/</link>
      <pubDate>Sun, 11 Jan 2026 10:42:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-firestore-ttl-como-automatizar-a-exclus%C3%A3o-de-dados-em-aplica%C3%A7%C3%B5es-angular/</guid>
      <description>&lt;p&gt;Manter dados obsoletos em seu banco de dados não é apenas uma questão de organização; é uma questão de &lt;strong&gt;custo&lt;/strong&gt; e &lt;strong&gt;performance&lt;/strong&gt;. Em aplicações como sistemas de bingo, convites de eventos ou tokens temporários, os dados perdem o valor após um curto período.&lt;/p&gt;&#xA;&lt;p&gt;O recurso de &lt;strong&gt;TTL (Time-to-Live)&lt;/strong&gt; do Firestore permite que você defina uma data de validade para um documento e deixe que o próprio Google se encarregue da &amp;ldquo;faxina&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Mantendo a Tela Acesa: Guia da Screen Wake Lock API com Angular</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-mantendo-a-tela-acesa-guia-da-screen-wake-lock-api-com-angular/</link>
      <pubDate>Fri, 09 Jan 2026 16:51:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-mantendo-a-tela-acesa-guia-da-screen-wake-lock-api-com-angular/</guid>
      <description>&lt;p&gt;Você já utilizou um aplicativo de receitas, GPS ou um jogo no navegador e ficou frustrado porque a tela desligou bem no momento crucial? Para resolver isso, existe a &lt;strong&gt;Screen Wake Lock API&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;o-que-é-a-screen-wake-lock-api&#34;&gt;&#xA;  O que é a Screen Wake Lock API?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-que-%c3%a9-a-screen-wake-lock-api&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;É uma interface do navegador que permite solicitar que o dispositivo não escureça ou bloqueie a tela. Diferente de hacks antigos que rodavam vídeos invisíveis, esta é uma solução &lt;strong&gt;nativa&lt;/strong&gt;, eficiente em termos de consumo de bateria e suportada pelos navegadores modernos (Chrome, Edge, Opera e Safari recente).&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Resolvendo Conflitos de Injeção e Tipagem: Angular 21 &#43; Firestore</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-resolvendo-conflitos-de-inje%C3%A7%C3%A3o-e-tipagem-angular-21-firestore/</link>
      <pubDate>Tue, 06 Jan 2026 20:10:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-resolvendo-conflitos-de-inje%C3%A7%C3%A3o-e-tipagem-angular-21-firestore/</guid>
      <description>&lt;p&gt;Ao atualizar para o Angular 21 e tentar utilizar o SDK modular do Firebase (&lt;code&gt;firebase/firestore&lt;/code&gt;), é comum se deparar com erros de &amp;ldquo;Provedor não encontrado&amp;rdquo; ou conflitos de tipos internos. Neste artigo, vamos dissecar a causa desses erros e como resolvê-los usando as melhores práticas atuais.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-o-erro-de-provedor-ng0201&#34;&gt;&#xA;  1. O Erro de Provedor: NG0201&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-erro-de-provedor-ng0201&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Mensagem:&lt;/strong&gt; &lt;code&gt;ERROR ɵNotFound: NG0201: No provider found for Firestore&lt;/code&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
