<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Angular on Tiago Costa</title>
    <link>https://tiagoscosta.tpps.com.br/tags/angular/</link>
    <description>Recent content in Angular on Tiago Costa</description>
    <generator>Hugo</generator>
    <language>pt-br</language>
    <lastBuildDate>Thu, 28 May 2026 15:52:00 +0000</lastBuildDate>
    <atom:link href="https://tiagoscosta.tpps.com.br/tags/angular/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>📝 Transformando um aplicação web em um PWA (Progressive Web App) com Angular</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-transformando-um-aplica%C3%A7%C3%A3o-web-em-um-pwa-progressive-web-app-com-angular/</link>
      <pubDate>Thu, 28 May 2026 15:52:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-transformando-um-aplica%C3%A7%C3%A3o-web-em-um-pwa-progressive-web-app-com-angular/</guid>
      <description>&lt;p&gt;Adicionar recursos de &lt;strong&gt;PWA (Progressive Web App)&lt;/strong&gt; a uma aplicação para eleva a experiência do usuário a outro patamar. Além de permitir que o aplicativo seja instalado diretamente na tela inicial do celular ou desktop sem depender das lojas de aplicativos (Google Play ou App Store), o PWA habilita o carregamento instantâneo de recursos através do armazenamento em cache por meio de &lt;em&gt;Service Workers&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Neste artigo, você aprenderá o passo a passo completo para configurar o suporte a PWA no ecossistema moderno do Angular.&lt;/p&gt;</description>
    </item>
    <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>📝 SEO para Web Apps: Dominando Sitemap, Robots.txt e Google Search Console</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-seo-para-web-apps-dominando-sitemap-robots-txt-e-google-search-console/</link>
      <pubDate>Wed, 28 Jan 2026 17:02:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-seo-para-web-apps-dominando-sitemap-robots-txt-e-google-search-console/</guid>
      <description>&lt;p&gt;Para que uma aplicação Angular seja encontrada, não basta que ela seja rápida; ela precisa ser &amp;ldquo;comunicativa&amp;rdquo; com os robôs de busca. No seu projeto, utilizará o tripé essencial de SEO técnico para garantir visibilidade orgânica.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-mapa-da-mina-sitemapxml&#34;&gt;&#xA;  1. O Mapa da Mina: Sitemap.xml&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-mapa-da-mina-sitemapxml&#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 &lt;code&gt;sitemap.xml&lt;/code&gt; funciona como um índice para o Google. Ele informa quais páginas são prioritárias e com que frequência elas são atualizadas.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Guia de Implementação: Google Analytics 4 (GA4) em Projetos Angular 21 (Standalone)</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-guia-de-implementa%C3%A7%C3%A3o-google-analytics-4-ga4-em-projetos-angular-21-standalone/</link>
      <pubDate>Wed, 28 Jan 2026 16:22:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-guia-de-implementa%C3%A7%C3%A3o-google-analytics-4-ga4-em-projetos-angular-21-standalone/</guid>
      <description>&lt;p&gt;Integrar o Google Analytics em uma aplicação moderna, não serve apenas para contar visitas. É a ferramenta essencial para entender a retenção de usuários e validar a eficácia da monetização.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-por-que-usar-o-ga4-em-sua-aplicação&#34;&gt;&#xA;  1. Por que usar o GA4 em sua aplicação?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-por-que-usar-o-ga4-em-sua-aplica%c3%a7%c3%a3o&#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 sites estáticos, muitas vezes aplicações de angular dependem de eventos. O GA4 permite medir:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Engajamento Real:&lt;/strong&gt; Quantas ações foram executadas.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Firebase App Check: Blindando sua Infraestrutura contra Acessos Não Autorizados</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-firebase-app-check-blindando-sua-infraestrutura-contra-acessos-n%C3%A3o-autorizados/</link>
      <pubDate>Mon, 26 Jan 2026 18:29:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-firebase-app-check-blindando-sua-infraestrutura-contra-acessos-n%C3%A3o-autorizados/</guid>
      <description>&lt;p&gt;O &lt;strong&gt;Firebase App Check&lt;/strong&gt; funciona como um selo de autenticidade para o seu aplicativo. Ele garante que as requisições feitas ao seu projeto Firebase venham exclusivamente do &lt;em&gt;seu site oficial&lt;/em&gt;* e de &lt;strong&gt;dispositivos legítimos&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Sem o App Check, um atacante poderia extrair suas chaves do Firebase do código-fonte (que são públicas por natureza no frontend) e usá-las para manipular seu banco de dados através de scripts externos. Com o App Check, o Firebase rejeita qualquer requisição que não possua um token de validação válido.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Guia de Implementação: reCAPTCHA v3 no Angular</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-guia-de-implementa%C3%A7%C3%A3o-recaptcha-v3-no-angular/</link>
      <pubDate>Mon, 26 Jan 2026 18:28:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-guia-de-implementa%C3%A7%C3%A3o-recaptcha-v3-no-angular/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Proteção Invisível contra Bots e Automações Maliciosas&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;O &lt;strong&gt;reCAPTCHA v3&lt;/strong&gt; representa uma evolução na segurança web. Diferente das versões anteriores, ele não interrompe o fluxo do usuário com desafios de &amp;ldquo;clique em todas as pontes&amp;rdquo;. Em vez disso, ele monitora o comportamento e retorna uma pontuação (score) que permite à aplicação decidir se a interação é legítima ou fruto de um script automatizado.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-preparação-obtendo-as-chaves-de-api&#34;&gt;&#xA;  1. Preparação: Obtendo as Chaves de API&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-prepara%c3%a7%c3%a3o-obtendo-as-chaves-de-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;Antes de tocar no código, você precisa registrar sua aplicação no ecossistema do Google.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Blindando Seu Aplicativo: Estratégias Essenciais Contra Ataques DoS e Exaustão de Recursos</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-blindando-seu-aplicativo-estrat%C3%A9gias-essenciais-contra-ataques-dos-e-exaust%C3%A3o-de-recursos/</link>
      <pubDate>Mon, 26 Jan 2026 17:59:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-blindando-seu-aplicativo-estrat%C3%A9gias-essenciais-contra-ataques-dos-e-exaust%C3%A3o-de-recursos/</guid>
      <description>&lt;p&gt;No universo do desenvolvimento web, a preocupação com a segurança vai além de senhas fortes e criptografia. Ataques de Negação de Serviço (DoS) e tentativas de exaustão de recursos são ameaças reais que podem sobrecarregar seus servidores, inflar seus custos e, no pior dos cenários, tirar sua aplicação do ar.&lt;/p&gt;&#xA;&lt;p&gt;Para desenvolvedores que utilizam plataformas como o Firebase, a preocupação se desloca do &amp;ldquo;derrubar o servidor&amp;rdquo; (que o Google gerencia com maestria) para o &lt;strong&gt;&amp;ldquo;estourar o orçamento&amp;rdquo;&lt;/strong&gt; ou &lt;strong&gt;&amp;ldquo;atingir limites de cota&amp;rdquo;&lt;/strong&gt; rapidamente. Felizmente, com as ferramentas certas, é possível construir uma defesa robusta.&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>
    <item>
      <title>🚀 Rotas Simplificadas: O Fim do AppModule no Angular Standalone</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-rotas-simplificadas-o-fim-do-appmodule-no-angular-standalone/</link>
      <pubDate>Tue, 16 Dec 2025 18:20:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-rotas-simplificadas-o-fim-do-appmodule-no-angular-standalone/</guid>
      <description>&lt;p&gt;A introdução dos &lt;strong&gt;Standalone Components&lt;/strong&gt; no Angular (a partir da versão 14 e totalmente adotada na v17+) trouxe uma transformação não apenas na estrutura dos componentes, mas também na maneira como configuramos o roteamento da aplicação.&lt;/p&gt;&#xA;&lt;p&gt;Se antes éramos obrigados a gerenciar múltiplos arquivos de módulo (&lt;code&gt;AppModule&lt;/code&gt;, &lt;code&gt;AppRoutingModule&lt;/code&gt;, &lt;em&gt;Feature Modules&lt;/em&gt;), hoje, podemos configurar todo o &lt;em&gt;routing&lt;/em&gt; diretamente no ponto de &lt;em&gt;bootstrap&lt;/em&gt; da aplicação.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-o-modelo-de-roteamento-tradicional-com-ngmodules&#34;&gt;&#xA;  🧐 O Modelo de Roteamento Tradicional (Com NgModules)&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#-o-modelo-de-roteamento-tradicional-com-ngmodules&#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;Historicamente, o roteamento no Angular exigia, no mínimo, três arquivos para funcionar corretamente:&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Angular: A Revolução Standalone vs. a Tradição Module</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-angular-a-revolu%C3%A7%C3%A3o-standalone-vs-a-tradi%C3%A7%C3%A3o-module/</link>
      <pubDate>Tue, 16 Dec 2025 17:45:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-angular-a-revolu%C3%A7%C3%A3o-standalone-vs-a-tradi%C3%A7%C3%A3o-module/</guid>
      <description>&lt;p&gt;Desde o Angular 14, os &lt;strong&gt;Standalone Components&lt;/strong&gt; (Componentes Autônomos) têm simplificado a forma como as aplicações são estruturadas, oferecendo uma alternativa mais leve e direta aos tradicionais &lt;strong&gt;NgModules&lt;/strong&gt;. Este artigo detalha as diferenças conceituais e mostra exemplos práticos de como migrar de um componente baseado em módulo para a nova abordagem autônoma.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;-o-modelo-tradicional-ngmodules&#34;&gt;&#xA;  🧐 O Modelo Tradicional: NgModules&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#-o-modelo-tradicional-ngmodules&#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 &lt;code&gt;NgModule&lt;/code&gt; é o pilar da arquitetura Angular há anos. Ele atua como um &lt;strong&gt;contêiner de metadados&lt;/strong&gt; que organiza e conecta partes coesas de sua aplicação.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
