<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Leonardo Nascimento | Engenheiro de Software</title>
	<atom:link href="https://leonardonascimento.dev/feed/" rel="self" type="application/rss+xml" />
	<link>https://leonardonascimento.dev/</link>
	<description>Especializado em backend, APIs e sistemas escaláveis. Experiência em arquitetura de sistemas, integrações, mensageria, performance e aplicações de alta disponibilidade.</description>
	<lastBuildDate>Fri, 30 Jan 2026 02:50:50 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://leonardonascimento.dev/wp-content/uploads/2021/05/cropped-programming-32x32.png</url>
	<title>Leonardo Nascimento | Engenheiro de Software</title>
	<link>https://leonardonascimento.dev/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Sistema completo de cobranças via WhatsApp: boleto, Pix e NF-e na prática</title>
		<link>https://leonardonascimento.dev/blog/sistema-completo-de-cobrancas-via-whatsapp-boleto-pix-e-nf/</link>
					<comments>https://leonardonascimento.dev/blog/sistema-completo-de-cobrancas-via-whatsapp-boleto-pix-e-nf/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Fri, 30 Jan 2026 11:00:00 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Dicas & Truques]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Produção]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[api banco inter]]></category>
		<category><![CDATA[api rest]]></category>
		<category><![CDATA[automação financeira]]></category>
		<category><![CDATA[boleto banco inter]]></category>
		<category><![CDATA[boleto registrado]]></category>
		<category><![CDATA[cache redis]]></category>
		<category><![CDATA[cobrança automatizada]]></category>
		<category><![CDATA[cobrança recorrente]]></category>
		<category><![CDATA[cron laravel]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[inadimplência]]></category>
		<category><![CDATA[integração banco inter]]></category>
		<category><![CDATA[laravel]]></category>
		<category><![CDATA[laravel 8]]></category>
		<category><![CDATA[laravel scheduler]]></category>
		<category><![CDATA[ligação automática]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[oauth2]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php-fpm]]></category>
		<category><![CDATA[pix api]]></category>
		<category><![CDATA[pix dinâmico]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[sistema de cobranças]]></category>
		<category><![CDATA[sms cobrança]]></category>
		<category><![CDATA[webhooks]]></category>
		<category><![CDATA[whatsapp api]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2360</guid>

					<description><![CDATA[<p>Automatizar cobranças nunca foi simples. Entre regras bancárias, vencimentos, Pix, boletos registrados, notificações, inadimplência e conciliação, a maioria dos sistemas acaba virando um emaranhado de scripts difíceis de manter. Neste artigo, vou mostrar como funciona, na prática, um sistema real de cobrança construído em Laravel, integrando Boleto e Pix do Banco Inter, com webhooks, PDFs, [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/sistema-completo-de-cobrancas-via-whatsapp-boleto-pix-e-nf/">Sistema completo de cobranças via WhatsApp: boleto, Pix e NF-e na prática</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://leonardonascimento.dev/blog/fluxo-n8n-api-whatsapp-log-com-dedupe-e-tratamento-de-erro/" type="post" id="2316">Automatizar </a>cobranças nunca foi simples. Entre regras bancárias, vencimentos, Pix, boletos registrados, notificações, inadimplência e conciliação, a maioria dos sistemas acaba virando um emaranhado de scripts difíceis de manter.</p>



<p>Neste artigo, vou mostrar <strong>como funciona, na prática</strong>, um sistema real de cobrança construído em <strong><a href="https://leonardonascimento.dev/categoria/laravel" type="link" id="https://leonardonascimento.dev/categoria/laravel" target="_blank" rel="noreferrer noopener nofollow">Laravel</a></strong>, integrando <strong>Boleto e Pix do Banco Inter</strong>, com <strong>webhooks</strong>, <strong>PDFs</strong>, <strong>crons</strong>, <strong>Docker</strong>, <strong>e-mails</strong>, <strong>WhatsApp</strong>, <strong>SMS</strong> e até <strong>ligações automáticas</strong>.</p>



<p>Todo o conteúdo é baseado em um projeto open source real, usado em produção, disponível no GitHub:</p>



<p>👉 <strong>Repositório:</strong><br><a href="https://github.com/leonardop21/boleto-inter-free">https://github.com/leonardop21/boleto-inter-free</a></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Importante: este não é um “tutorial de Hello World”. É um guia técnico completo, voltado para quem quer <strong>entender arquitetura</strong>, <strong>evitar erros comuns</strong> e <strong>colocar cobrança automática em produção com segurança</strong>.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-por-que-integrar-diretamente-com-o-banco-inter">Por que integrar diretamente com o Banco Inter?</h2>



<p>O Banco Inter oferece uma <a href="https://leonardonascimento.dev/blog/arquitetura-de-uma-api-rest-em-laravel-preparada-para-producao/" type="post" id="2358">API </a>robusta para PJ, com suporte nativo a:</p>



<ul class="wp-block-list">
<li>Boletos registrados</li>



<li>Pix com QR Code dinâmico</li>



<li>Webhooks de status</li>



<li>Consulta de cobranças</li>



<li>Download de PDFs</li>



<li>Extratos bancários</li>
</ul>



<p>Ao integrar diretamente com o Inter, você elimina intermediários, reduz custos e ganha controle total sobre o fluxo financeiro.</p>



<p>Mas isso vem com desafios:</p>



<ul class="wp-block-list">
<li>Certificados mTLS</li>



<li>OAuth2</li>



<li>Regras rígidas de vencimento</li>



<li>Webhooks que precisam ser idempotentes</li>



<li>PDFs que precisam ser armazenados ou regenerados</li>



<li>Conciliação automática</li>
</ul>



<p>É exatamente isso que o projeto resolve.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-visao-geral-da-arquitetura-do-sistema">Visão geral da arquitetura do sistema</h2>



<p>Antes de entrar em código, é importante entender <strong>como o sistema foi pensado</strong>.</p>



<h3 class="wp-block-heading" id="h-componentes-principais">Componentes principais</h3>



<ul class="wp-block-list">
<li><strong>Laravel 8</strong> como base</li>



<li><strong>MySQL</strong> para dados transacionais</li>



<li><strong>Redis</strong> para cache com tags</li>



<li><strong>Banco Inter API</strong> para cobranças</li>



<li><strong>Notifish</strong> para WhatsApp</li>



<li><strong>SMTP</strong> para e-mails</li>



<li><strong>SMS Dev</strong> para SMS</li>



<li><strong>King SMS (Voicer)</strong> para ligações</li>



<li><strong>Docker + Nginx + PHP-FPM</strong> em produção</li>
</ul>



<p>Nada aqui é experimental. Tudo foi pensado para <strong>rodar 24/7</strong>, com falhas previsíveis e logs rastreáveis.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-por-que-redis-e-obrigatorio-neste-projeto">Por que Redis é obrigatório neste projeto?</h2>



<p>Um erro comum em sistemas de cobrança é <strong>consultar a API do banco o tempo todo</strong>.</p>



<p>Esse projeto evita isso usando <strong>cache agressivo com tags</strong>, por exemplo:</p>



<ul class="wp-block-list">
<li>Cache de cobranças</li>



<li>Cache de clientes</li>



<li>Cache de serviços</li>



<li>Cache de status de boletos e Pix</li>
</ul>



<p>Quando um boleto muda de status (via webhook), o cache relacionado é invalidado.</p>



<p>👉 Sem Redis (ou Memcached), o sistema <strong>não funciona corretamente</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-instalacao-do-projeto-ambiente-local">Instalação do projeto (ambiente local)</h2>



<h3 class="wp-block-heading" id="h-1-clonando-o-repositorio">1. Clonando o repositório</h3>



<pre class="wp-block-code"><code>git clone https://github.com/leonardop21/boleto-inter-free.git
cd boleto-inter-free
composer install
</code></pre>



<h3 class="wp-block-heading" id="h-2-configuracao-inicial">2. Configuração inicial</h3>



<pre class="wp-block-code"><code>cp .env.example .env
php artisan key:generate
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-configurando-o-banco-de-dados-e-cache">Configurando o banco de dados e cache</h2>



<p>No <code>.env</code>:</p>



<pre class="wp-block-code"><code>DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=boleto_inter
DB_USERNAME=user
DB_PASSWORD=pass

CACHE_DRIVER=redis
SESSION_DRIVER=redis
TIME_CACHE_IN_SECONDS=604800
</code></pre>



<p>Depois:</p>



<pre class="wp-block-code"><code>php artisan migrate
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-como-funciona-o-modelo-de-cobranca">Como funciona o modelo de cobrança</h2>



<p>O sistema foi pensado para <strong>cobrança recorrente</strong>, mas funciona também para cobranças pontuais.</p>



<h3 class="wp-block-heading" id="h-entidades-principais">Entidades principais</h3>



<ul class="wp-block-list">
<li><strong>Cliente</strong></li>



<li><strong>Serviço</strong></li>



<li><strong>Cliente x Serviço</strong></li>



<li><strong>Boleto</strong></li>



<li><strong>Pix</strong></li>



<li><strong>NF-e (opcional)</strong></li>
</ul>



<p>O fluxo é simples:</p>



<ol class="wp-block-list">
<li>Você cadastra um cliente</li>



<li>Cadastra um serviço</li>



<li>Vincula o serviço ao cliente</li>



<li>O sistema gera boletos ou Pix automaticamente</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-integracao-com-o-banco-inter-parte-critica">Integração com o Banco Inter (parte crítica)</h2>



<h3 class="wp-block-heading" id="h-certificados-mtls">Certificados mTLS</h3>



<p>O Inter exige:</p>



<ul class="wp-block-list">
<li>Um arquivo <code>.crt</code></li>



<li>Um arquivo <code>.key</code></li>
</ul>



<p>No <code>.env</code>:</p>



<pre class="wp-block-code"><code>INTER_PATH_CRT=/caminho/inter.crt
INTER_PATH_KEY=/caminho/inter.key
</code></pre>



<h3 class="wp-block-heading" id="h-oauth2">OAuth2</h3>



<pre class="wp-block-code"><code>INTER_CLIENT_ID=seu_client_id
INTER_CLIENT_SECRET=seu_client_secret
INTER_CLIENT_SCOPE="extrato.read boleto-cobranca.read boleto-cobranca.write"
INTER_BASE_URL="https://cdpj.partners.bancointer.com.br/"
</code></pre>



<p>Sem isso, <strong>nenhuma requisição funciona</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-webhooks-o-coracao-da-automacao">Webhooks: o coração da automação</h2>



<p>O sistema registra dois webhooks no Inter:</p>



<ul class="wp-block-list">
<li><strong>Boleto</strong></li>



<li><strong>Pix</strong></li>
</ul>



<pre class="wp-block-code"><code>INTER_WEBHOOK_URL=https://seusite.com/api/inter/webhook/boleto
INTER_WEBHOOK_URL_PIX=https://seusite.com/api/inter/webhook/pix
</code></pre>



<h3 class="wp-block-heading" id="h-o-que-acontece-quando-um-pagamento-e-feito">O que acontece quando um pagamento é feito?</h3>



<ol class="wp-block-list">
<li>O Inter chama o webhook</li>



<li>O sistema valida a assinatura</li>



<li>Atualiza o status da cobrança</li>



<li>Invalida caches relacionados</li>



<li>Registra logs</li>



<li>(Opcional) dispara notificações internas</li>
</ol>



<p>Isso evita:</p>



<ul class="wp-block-list">
<li>Jobs de polling</li>



<li>Consultas desnecessárias</li>



<li>Status desatualizado</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-geracao-automatica-de-boletos">Geração automática de boletos</h2>



<p>Este é um dos pontos mais sofisticados do projeto.</p>



<p>Comando:</p>



<pre class="wp-block-code"><code>php artisan ln:auto_generate_boleto
</code></pre>



<h3 class="wp-block-heading" id="h-regras-implementadas">Regras implementadas</h3>



<ul class="wp-block-list">
<li>Se o dia de vencimento já passou → gera para o mês seguinte</li>



<li>Se o cliente escolheu dia 31 → ajusta para último dia do mês</li>



<li>Respeita meses com 28, 29, 30 ou 31 dias</li>



<li>Evita boletos duplicados</li>



<li>Gera PDF automaticamente</li>



<li>Salva logs detalhados</li>
</ul>



<p>Tudo isso roda <strong>sem intervenção humana</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-geracao-automatica-de-pix">Geração automática de Pix</h2>



<p>Comando:</p>



<pre class="wp-block-code"><code>php artisan ln:auto_generate_pix
</code></pre>



<ul class="wp-block-list">
<li>Gera QR Code</li>



<li>Gera payload Pix</li>



<li>Cria cobrança no Inter</li>



<li>Registra vencimento</li>



<li>Gera imagem do QR Code (GD)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-envio-de-cobrancas-por-e-mail">Envio de cobranças por e-mail</h2>



<p>O sistema envia:</p>



<ul class="wp-block-list">
<li>Boleto em PDF</li>



<li>Pix com QR Code</li>



<li>NF-e (se configurado)</li>
</ul>



<p>Configuração SMTP no <code>.env</code>:</p>



<pre class="wp-block-code"><code>MAIL_HOST=
MAIL_PORT=587
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=tls
</code></pre>



<p>Além disso, o layout do e-mail é personalizável:</p>



<ul class="wp-block-list">
<li>Logo</li>



<li>Cor de fundo</li>



<li>Links de suporte</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-envio-por-whatsapp-notifish">Envio por WhatsApp (Notifish)</h2>



<p>Integração direta com a API do <a href="https://notifish.com/">Notifish</a>.</p>



<pre class="wp-block-code"><code>NOTIFISH_BASE_URL=https://seu.notifish.com/api/v2/
NOTIFISH_API_KEY=sua_key
NOTIFISH_UUID=sua_instancia
</code></pre>



<p>O sistema gera uma <strong>URL assinada temporária</strong> para o PDF do boleto, válida por poucos minutos — sem expor IDs internos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-sms-e-ligacoes-automaticas-para-inadimplentes">SMS e ligações automáticas para inadimplentes</h2>



<h3 class="wp-block-heading" id="h-sms">SMS</h3>



<pre class="wp-block-code"><code>php artisan ln:send-boleto-sms
php artisan ln:send-pix-sms
</code></pre>



<h3 class="wp-block-heading" id="h-ligacao-voz-robotica">Ligação (voz robótica)</h3>



<pre class="wp-block-code"><code>php artisan ln:send-boleto-voicer
php artisan ln:send-pix-voicer
</code></pre>



<p>Isso é usado <strong>somente após o vencimento</strong>, como camada extra de cobrança.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-crons-como-tudo-roda-sozinho">Crons: como tudo roda sozinho</h2>



<p>Você <strong>não agenda cada comando individualmente</strong>.</p>



<p>Apenas:</p>



<pre class="wp-block-code"><code>* * * * * php artisan schedule:run
</code></pre>



<p>O Laravel Scheduler cuida do resto.</p>



<p>Exemplo:</p>



<ul class="wp-block-list">
<li>Dia 1 → gera boletos</li>



<li>Antes do vencimento → envia lembrete</li>



<li>Após vencimento → cobrança progressiva</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-docker-em-producao">Docker em produção</h2>



<p>O projeto já vem com:</p>



<ul class="wp-block-list">
<li><code>Dockerfile</code></li>



<li><code>docker-compose.prod.yml</code></li>



<li>Nginx configurado</li>



<li>PHP-FPM otimizado</li>



<li>Redis</li>



<li>MySQL</li>
</ul>



<p>Subir produção:</p>



<pre class="wp-block-code"><code>docker compose -f docker-compose.prod.yml up -d --build
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-logs-rastreabilidade-e-auditoria">Logs, rastreabilidade e auditoria</h2>



<p>Cada processo tem seu próprio log:</p>



<ul class="wp-block-list">
<li>Boletos</li>



<li>Pix</li>



<li>NF-e</li>



<li>Webhooks</li>



<li>Erros de API</li>
</ul>



<p>Isso é fundamental para:</p>



<ul class="wp-block-list">
<li>Suporte</li>



<li>Auditoria</li>



<li>Contabilidade</li>



<li>Diagnóstico rápido</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-para-quem-este-projeto-e-indicado">Para quem este projeto é indicado?</h2>



<ul class="wp-block-list">
<li>Desenvolvedores PHP/Laravel</li>



<li>SaaS com cobrança recorrente</li>



<li>Sistemas internos de empresas</li>



<li>Agências que querem padronizar cobrança</li>



<li>Projetos que precisam de autonomia financeira</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-conclusao">Conclusão</h2>



<p>Automatizar cobranças não é só “gerar boleto”.<br>É lidar com:</p>



<ul class="wp-block-list">
<li>Datas</li>



<li>Erros bancários</li>



<li>Comunicação</li>



<li>Inadimplência</li>



<li>Escala</li>



<li>Observabilidade</li>
</ul>



<p>Este projeto resolve isso de forma <strong>pragmática</strong>, <strong>realista</strong> e <strong>testada em produção</strong>.</p>



<p>👉 Repositório completo:<br><a href="https://github.com/leonardop21/boleto-inter-free">https://github.com/leonardop21/boleto-inter-free</a></p>



<p></p>
<p>The post <a href="https://leonardonascimento.dev/blog/sistema-completo-de-cobrancas-via-whatsapp-boleto-pix-e-nf/">Sistema completo de cobranças via WhatsApp: boleto, Pix e NF-e na prática</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/sistema-completo-de-cobrancas-via-whatsapp-boleto-pix-e-nf/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como monitorar aplicação e servidor pelo WhatsApp (logs, erros e alertas)</title>
		<link>https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/</link>
					<comments>https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Thu, 29 Jan 2026 15:19:35 +0000</pubDate>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Produção]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Alertas]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[monitoramento]]></category>
		<category><![CDATA[notifish]]></category>
		<category><![CDATA[produção]]></category>
		<category><![CDATA[WhatsApp]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2290</guid>

					<description><![CDATA[<p>WhatsApp é um canal excelente para alerta porque ele tem uma característica que e-mail e dashboard não têm: chega onde você está. O problema é que a maioria das implementações vira bagunça rápido — alerta demais, duplicado, sem contexto, e em pouco tempo todo mundo ignora. A forma correta de fazer isso é tratar WhatsApp [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/">Como monitorar aplicação e servidor pelo WhatsApp (logs, erros e alertas)</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>WhatsApp é um canal excelente para alerta porque ele tem uma característica que e-mail e dashboard não têm: <strong>chega onde você está</strong>. O problema é que a maioria das implementações vira bagunça rápido — alerta demais, duplicado, sem contexto, e em pouco tempo todo mundo ignora.</p>



<p>A forma correta de fazer isso é tratar WhatsApp como <strong><a href="https://leonardonascimento.dev/blog/updown-io-receba-notificacao-no-whatsapp-caso-seu-site-fique-indisponivel/" type="post" id="164">camada de notificação</a></strong>, não como sistema de monitoramento. Você continua monitorando com ferramentas e sinais confiáveis (uptime, métricas, logs, filas, erros), mas centraliza o envio e a governança dos alertas em um lugar só — e aí o <a href="http://notifish.com/" type="link" id="http://notifish.com/" target="_blank" rel="noreferrer noopener nofollow">Notifish </a>entra bem.</p>



<p>A ideia é simples: <strong>qualquer evento relevante → vira um “evento de notificação” → Notifish entrega no WhatsApp</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-que-vale-a-pena-mandar-para-o-whatsapp-e-o-que-nao-vale">O que vale a pena mandar para o WhatsApp (e o que não vale)</h2>



<p>WhatsApp deve receber só o que exige ação ou atenção rápida. Em produção, eu separo em três níveis:</p>



<p><strong>Crítico (manda sempre):</strong></p>



<ul class="wp-block-list">
<li>aplicação fora do ar / endpoint crítico fora</li>



<li>erro 5xx em alta (explosão de taxa de erro)</li>



<li>fila parou de consumir / backlog crescendo rápido</li>



<li>disco quase cheio / risco de indisponibilidade</li>



<li>falha em integração crítica (pagamento, mensagens, etc.)</li>
</ul>



<p><strong>Alerta (manda com filtro):</strong></p>



<ul class="wp-block-list">
<li>latência acima do normal por X minutos</li>



<li>aumento gradual de erros específicos</li>



<li>Redis indisponível (com fallback) ou lento</li>



<li>uso de CPU/memória alto por período sustentado</li>
</ul>



<p><strong>Informativo (geralmente não manda no WhatsApp):</strong></p>



<ul class="wp-block-list">
<li>deploy realizado</li>



<li>logs de rotina</li>



<li>warnings esporádicos</li>
</ul>



<p>O que destrói o canal é “alerta informativo demais”. WhatsApp é para <strong>sinal forte</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-arquitetura-recomendada-sem-gambiarra">Arquitetura recomendada (sem gambiarra)</h2>



<p>O melhor padrão é este:</p>



<ol class="wp-block-list">
<li>Você tem fontes de evento (monitoramento/observabilidade):</li>
</ol>



<ul class="wp-block-list">
<li>Uptime/health-check (aplicação)</li>



<li>Métricas do servidor (CPU, RAM, disco)</li>



<li>Logs (erros específicos, padrões)</li>



<li>Erros de aplicação (exceptions)</li>



<li>Filas (backlog, falhas, retries)</li>
</ul>



<ol start="2" class="wp-block-list">
<li>Um “gerador de eventos” cria um evento padronizado.</li>



<li>Você envia esse evento para o <a href="https://developers.notifish.com/" type="link" id="https://developers.notifish.com/" target="_blank" rel="noreferrer noopener nofollow"><strong>Notifish via API</strong>.</a></li>



<li>Você define roteamento, deduplicação e templates</li>
</ol>



<ul class="wp-block-list">
<li>para qual número/grupo enviar</li>



<li>se deve agrupar, deduplicar, aplicar rate limit</li>



<li>qual template usar (curto, completo, escalonamento)</li>
</ul>



<p>Esse desenho escala porque você não espalha envio de WhatsApp por todo sistema. Você centraliza.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-como-fica-uma-mensagem-boa-no-whatsapp">Como fica uma mensagem boa no WhatsApp</h2>



<p>Uma mensagem útil precisa ter contexto mínimo e ação sugerida:</p>



<ul class="wp-block-list">
<li><strong>Título curto</strong> (o que aconteceu)</li>



<li><strong>Ambiente</strong> (prod, staging)</li>



<li><strong>Serviço</strong> (api, worker, site)</li>



<li><strong>Sintoma</strong> (erro, timeout, backlog)</li>



<li><strong>Impacto</strong> (estimado)</li>



<li><strong>Link</strong> (dashboard/logs, se existir)</li>



<li><strong>Ação recomendada</strong> (1 linha)</li>
</ul>



<p>Exemplo de payload humano:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>ALERTA CRÍTICO</strong>: API 5xx alto<br>Ambiente: prod | Serviço: api<br>Erros 5xx: 18% (últimos 5 min)<br>Endpoint: /api/orders<br>Ação: verificar logs + dependência “Payments”</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-implementacao-via-api-com-notifish-modelo-pratico">Implementação via API com Notifish (modelo prático)</h2>



<p>Você pode integrar de dois jeitos:</p>



<h3 class="wp-block-heading" id="h-1-seu-sistema-envia-eventos-diretamente-laravel-cron-scripts">1) Seu sistema envia eventos diretamente (Laravel, cron, scripts)</h3>



<p>Bom quando você mesmo detecta (fila, logs, métricas internas).</p>



<h3 class="wp-block-heading" id="h-2-ferramentas-externas-chamam-o-notifish-uptime-monitoramento">2) Ferramentas externas chamam o Notifish (uptime/monitoramento)</h3>



<p>Bom para health-check e métricas do servidor (quando a ferramenta já faz o “detector”).</p>



<p>Como você pediu implementação via API, vou te mostrar um modelo que funciona bem</p>



<h3 class="wp-block-heading" id="h-payload-recomendado-evento">Payload recomendado (evento)</h3>



<p></p>



<pre class="wp-block-preformatted">{<br>  "message": "Sua mensagem de alerta",<br>  "identifier": "seu identificador único de disparo",<br>  "link": true,<br>  "typing": "composing",<br>  "delayMessage": 1200<br>}<br></pre>



<p><strong>Por que esse formato funciona:</strong></p>



<ul class="wp-block-list">
<li><strong>identifier</strong>: chave de deduplicação / idempotência do alerta</li>



<li><strong>message</strong>: texto já formatado com contexto (ambiente/serviço/ação)</li>



<li><strong>delayMessage/typing</strong>: ajustes de entrega (opcionais)</li>
</ul>



<h2 class="wp-block-heading">Exemplo em Laravel enviando evento ao Notifish</h2>



<pre class="wp-block-preformatted">class NotifishClient
{
    public function sendToGroups(string $message, string $identifier, bool $link = true, int $delayMs = 0, string $typing = 'composing'): void
    {
        $url = rtrim(config('services.notifish.base_url'), '/')
            . '/api/v2/' . config('services.notifish.instance')
            . '/whatsapp/message/groups';

        $payload = [
            'message' => $message,
            'identifier' => $identifier,
            'link' => $link,
            'typing' => $typing,
            'delayMessage' => $delayMs,
        ];

        $response = Http::withToken(config('services.notifish.token'))
            ->acceptJson()
            ->contentType('application/json')
            ->timeout(8)
            ->post($url, $payload);

        if (!$response->successful()) {
            logger()->error('Notifish send failed', [
                'status' => $response->status(),
                'body' => $response->body(),
                'identifier' => $identifier,
            ]);
        }
    }
}

</pre>



<h2 class="wp-block-heading">Regras importantes para não virar caos</h2>



<p>Se você fizer só “manda mensagem”, em 2 semanas o canal morre. Algumas regras que eu considero obrigatórias:</p>



<p><strong>1) Deduplicação</strong></p>



<ul class="wp-block-list">
<li>Todo alerta precisa de <code>dedupe_key</code>.</li>



<li>Se o mesmo alerta acontecer 100 vezes, você manda 1 e “atualiza”/agrupa.</li>
</ul>



<p><strong>2) Rate limit por severidade</strong></p>



<ul class="wp-block-list">
<li>Crítico: pode repetir, mas com intervalo mínimo (ex.: 5–10 min).</li>



<li>Alerta: intervalo maior (ex.: 15–30 min).</li>



<li>Informativo: geralmente fora do WhatsApp.</li>
</ul>



<p><strong>3) Idempotência</strong></p>



<ul class="wp-block-list">
<li>Eventos iguais devem produzir o mesmo estado.</li>



<li>Se a chamada repetir, não deve disparar em duplicidade.</li>
</ul>



<p><strong>4) Conteúdo curto</strong><br>WhatsApp é leitura rápida. Se precisar detalhe, coloque em <code>meta</code> e mande link para logs/dashboard quando possível.</p>



<p><strong>5) Escalonamento</strong><br>Se continuar crítico por X tempo, notifica outro grupo/gestor.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">O que monitorar para disparar eventos úteis (fontes típicas)</h2>



<p>Você pode começar com estes gatilhos (são os que mais dão retorno):</p>



<ul class="wp-block-list">
<li><strong>Health-check HTTP</strong> (200/500, tempo de resposta, quedas)</li>



<li><strong>Taxa de erro</strong> (5xx e exceções por minuto)</li>



<li><strong>Fila</strong> (backlog, jobs failed, tempo médio)</li>



<li><strong>Banco</strong> (conexões, queries lentas, timeouts)</li>



<li><strong>Redis</strong> (latência, indisponibilidade, memória/eviction)</li>



<li><strong>Servidor</strong> (disco, load alto sustentado)</li>



<li><strong>Integrações externas</strong> (timeout e falha por janela)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Monitorar “pelo WhatsApp” não é substituir observabilidade por chat. É transformar sinais importantes em alertas acionáveis, com governança. O Notifish entra como a peça que centraliza o envio e impede que cada sistema invente seu próprio jeito de notificar.</p>



<p>Se você faz dedupe, rate limit, severidade e contexto mínimo, o WhatsApp vira um canal confiável — e não um spam de produção.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/">Como monitorar aplicação e servidor pelo WhatsApp (logs, erros e alertas)</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arquitetura de uma API REST em Laravel preparada para produção</title>
		<link>https://leonardonascimento.dev/blog/arquitetura-de-uma-api-rest-em-laravel-preparada-para-producao/</link>
					<comments>https://leonardonascimento.dev/blog/arquitetura-de-uma-api-rest-em-laravel-preparada-para-producao/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Wed, 28 Jan 2026 22:44:00 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Dicas & Truques]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[teste]]></category>
		<category><![CDATA[api rest]]></category>
		<category><![CDATA[arquitetura de software]]></category>
		<category><![CDATA[autenticação api]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[ci/cd]]></category>
		<category><![CDATA[clean architecture]]></category>
		<category><![CDATA[desenvolvimento backend]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker compose]]></category>
		<category><![CDATA[documentação api]]></category>
		<category><![CDATA[engenharia de software]]></category>
		<category><![CDATA[github actions]]></category>
		<category><![CDATA[laravel]]></category>
		<category><![CDATA[laravel sanctum]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[projeto para portfólio]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[repository pattern]]></category>
		<category><![CDATA[service layer]]></category>
		<category><![CDATA[swagger]]></category>
		<category><![CDATA[testes automatizados]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2358</guid>

					<description><![CDATA[<p>Em processos seletivos técnicos, não basta entregar código funcional. Cada vez mais, empresas avaliam arquitetura, decisões técnicas, organização do projeto, automação e capacidade de escalar a solução. Este artigo detalha a arquitetura de uma API REST desenvolvida em Laravel para gerenciamento de tarefas, criada como parte de um teste técnico, mas estruturada como um projeto [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/arquitetura-de-uma-api-rest-em-laravel-preparada-para-producao/">Arquitetura de uma API REST em Laravel preparada para produção</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Em processos seletivos técnicos, não basta entregar código funcional. Cada vez mais, empresas avaliam <strong>arquitetura, decisões técnicas, organização do projeto, automação e capacidade de escalar a solução</strong>.</p>



<p>Este artigo detalha a arquitetura de uma <strong><a href="https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/" type="post" id="2290">API REST</a> desenvolvida em Laravel para gerenciamento de tarefas</strong>, <a href="https://github.com/leonardop21/laravel-task" type="link" id="https://github.com/leonardop21/laravel-task" target="_blank" rel="noreferrer noopener nofollow">criada como parte de um teste técnico,</a> mas estruturada como um projeto <strong>pronto para produção</strong>, seguindo boas práticas amplamente utilizadas em ambientes corporativos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-visao-geral-da-solucao">Visão geral da solução</h2>



<p>A aplicação consiste em uma <strong>API RESTful para gerenciamento de tarefas</strong>, com suporte a:</p>



<ul class="wp-block-list">
<li>Autenticação via Bearer Token (Laravel Sanctum)</li>



<li>CRUD completo de tarefas</li>



<li>Marcação de tarefas como concluídas</li>



<li>Cache de consultas com Redis</li>



<li>Banco de dados PostgreSQL</li>



<li>Documentação interativa via Swagger</li>



<li>Ambiente Dockerizado (dev, test e prod)</li>



<li>Testes automatizados</li>



<li>Pipeline de CI/CD com GitHub Actions</li>
</ul>



<p>O foco não foi apenas “fazer funcionar”, mas <strong>pensar a aplicação como um produto escalável e previsível</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-decisao-arquitetural-api-stateless-e-autenticacao">Decisão arquitetural: API stateless e autenticação</h2>



<p>A API foi construída como <strong>stateless</strong>, utilizando <strong>Bearer Token via Laravel Sanctum</strong>.</p>



<h3 class="wp-block-heading" id="h-beneficios-dessa-abordagem">Benefícios dessa abordagem:</h3>



<ul class="wp-block-list">
<li>Facilidade de integração com frontends (SPA, mobile, terceiros)</li>



<li>Independência de sessão</li>



<li>Escalabilidade horizontal</li>



<li>Compatibilidade com gateways, load balancers e proxies</li>
</ul>



<p>A autenticação é desacoplada do fluxo de negócio, o que facilita manutenção e evolução futura.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-postgresql-como-banco-principal">PostgreSQL como banco principal</h2>



<p>A escolha do <strong>PostgreSQL</strong> não foi aleatória. Ele é amplamente utilizado em ambientes corporativos por oferecer:</p>



<ul class="wp-block-list">
<li>Confiabilidade transacional</li>



<li>Suporte avançado a índices</li>



<li>Tipos de dados ricos</li>



<li>Excelente desempenho em cenários complexos</li>
</ul>



<p>Isso torna a aplicação preparada para crescer sem precisar trocar a base de dados no curto ou médio prazo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-redis-como-camada-de-cache">Redis como camada de cache</h2>



<p>Para reduzir carga no banco e melhorar tempo de resposta, foi implementado <strong>cache com Redis</strong>, com TTL de 120 segundos nas consultas mais comuns.</p>



<h3 class="wp-block-heading" id="h-beneficios-diretos">Benefícios diretos:</h3>



<ul class="wp-block-list">
<li>Redução de queries repetitivas</li>



<li>Menor latência</li>



<li>Melhor desempenho sob carga</li>



<li>Escalabilidade em leitura</li>
</ul>



<p>Essa abordagem demonstra preocupação com <strong>performance real</strong>, não apenas com lógica funcional.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-arquitetura-limpa-repository-pattern-service-layer">Arquitetura limpa: Repository Pattern + Service Layer</h2>



<p><a href="https://leonardonascimento.dev/blog/php-alem-do-crud-como-escrever-codigo-que-nao-vira-problema-em-producao/" type="post" id="2348">A aplicação segue princípios de <strong>Clean Architecture</strong></a>, separando responsabilidades de forma clara:</p>



<ul class="wp-block-list">
<li><strong>Controllers</strong>: recebem requisições e retornam respostas</li>



<li><strong>Services</strong>: concentram regras de negócio</li>



<li><strong>Repositories</strong>: isolam o acesso a dados</li>



<li><strong>Models</strong>: representam as entidades</li>
</ul>



<h3 class="wp-block-heading" id="h-vantagens-dessa-separacao">Vantagens dessa separação:</h3>



<ul class="wp-block-list">
<li>Código mais legível</li>



<li>Facilidade de testes</li>



<li>Menor acoplamento</li>



<li>Evolução segura do domínio</li>
</ul>



<p>Essa estrutura é comum em times maduros e projetos de longo prazo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-docker-como-base-do-ambiente">Docker como base do ambiente</h2>



<p>Toda a aplicação roda em <strong>Docker</strong>, com ambientes bem definidos:</p>



<h3 class="wp-block-heading" id="h-desenvolvimento">Desenvolvimento</h3>



<ul class="wp-block-list">
<li>Código em volume</li>



<li>Hot reload</li>



<li>PostgreSQL + Redis + Nginx</li>



<li>Testes executados automaticamente</li>
</ul>



<h3 class="wp-block-heading" id="h-producao">Produção</h3>



<ul class="wp-block-list">
<li>Build otimizado</li>



<li>Código embutido na imagem</li>



<li>Assets compilados no build</li>



<li>Sem dependência de volume</li>
</ul>



<p>Essa separação reduz o clássico problema de “funciona na minha máquina” e aproxima o ambiente local da produção.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-testes-automatizados-como-parte-do-fluxo">Testes automatizados como parte do fluxo</h2>



<p>A aplicação conta com <strong>testes unitários e de feature</strong>, executados de três formas:</p>



<ul class="wp-block-list">
<li>Localmente no ambiente dev</li>



<li>Isoladamente via Docker</li>



<li>Automaticamente no CI/CD</li>
</ul>



<p>Isso garante:</p>



<ul class="wp-block-list">
<li>Segurança para refatorações</li>



<li>Detecção precoce de bugs</li>



<li>Confiança na entrega contínua</li>
</ul>



<p>Testes não são tratados como opcional, mas como <strong>parte da arquitetura</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-ci-cd-com-github-actions">CI/CD com GitHub Actions</h2>



<p>Cada push ou pull request dispara um workflow que:</p>



<ol class="wp-block-list">
<li>Sobe toda a stack Docker (app, banco, cache)</li>



<li>Executa migrations</li>



<li>Roda a suíte completa de testes</li>



<li>Bloqueia o merge em caso de falha</li>
</ol>



<p>Esse processo simula um pipeline real de empresas que operam com <strong>entrega contínua e qualidade de código como requisito</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-documentacao-com-swagger">Documentação com Swagger</h2>



<p>A API possui <strong>documentação interativa via Swagger</strong>, acessível após subir a aplicação.</p>



<p>Isso permite:</p>



<ul class="wp-block-list">
<li>Testes manuais rápidos</li>



<li>Onboarding mais fácil</li>



<li>Comunicação clara entre backend e frontend</li>



<li>Uso por terceiros sem dependência de documentação externa</li>
</ul>



<p>Documentação é tratada como parte do produto, não como etapa posterior.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-beneficios-dessa-arquitetura-em-um-contexto-profissional">Benefícios dessa arquitetura em um contexto profissional</h2>



<p>Essa abordagem entrega vantagens claras em ambientes reais:</p>



<ul class="wp-block-list">
<li>Código organizado e previsível</li>



<li>Facilidade de manutenção</li>



<li>Escalabilidade técnica</li>



<li>Padronização de ambientes</li>



<li>Menor risco em deploys</li>



<li>Base sólida para crescimento</li>
</ul>



<p>Não se trata apenas de uma API de tarefas, mas de <strong>um modelo replicável para aplicações reais</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-que-esse-projeto-demonstra-tecnicamente">O que esse projeto demonstra tecnicamente</h2>



<p>Esse projeto evidencia competências como:</p>



<ul class="wp-block-list">
<li><a href="http://leonardonascimento.dev/categoria/laravel">Domínio de Laravel além do básico</a></li>



<li>Conhecimento de arquitetura backend</li>



<li>Uso consciente de cache e banco</li>



<li>Experiência com Docker e ambientes reais</li>



<li>Cultura de testes</li>



<li>Automação de CI/CD</li>



<li>Pensamento orientado a produto e escala</li>
</ul>



<p>São exatamente esses pontos que diferenciam um desenvolvedor <strong>pleno/sênior</strong> em processos seletivos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-conclusao">Conclusão</h2>



<p>Mais do que cumprir um teste técnico, o objetivo deste projeto foi demonstrar <strong>capacidade de pensar sistemas como um todo</strong>, indo além do CRUD simples.</p>



<p>Arquitetura, automação, testes e previsibilidade são o que tornam uma aplicação sustentável — e é isso que empresas buscam quando contratam profissionais para projetos de longo prazo.</p>



<p></p>



<p><a href="https://github.com/leonardop21/laravel-task" target="_blank" rel="noreferrer noopener nofollow">Link do teste prático</a></p>
<p>The post <a href="https://leonardonascimento.dev/blog/arquitetura-de-uma-api-rest-em-laravel-preparada-para-producao/">Arquitetura de uma API REST em Laravel preparada para produção</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/arquitetura-de-uma-api-rest-em-laravel-preparada-para-producao/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Automação de WhatsApp para WordPress: uma solução escalável para empresas e portais</title>
		<link>https://leonardonascimento.dev/blog/automacao-de-whatsapp-para-wordpress-uma-solucao-escalavel-para-empresas-e-portais/</link>
					<comments>https://leonardonascimento.dev/blog/automacao-de-whatsapp-para-wordpress-uma-solucao-escalavel-para-empresas-e-portais/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Tue, 27 Jan 2026 11:39:00 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Dicas & Truques]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Produção]]></category>
		<category><![CDATA[Seo & Marketing]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[automação de conteúdo]]></category>
		<category><![CDATA[automação editorial]]></category>
		<category><![CDATA[automação whatsapp]]></category>
		<category><![CDATA[comunicação empresarial]]></category>
		<category><![CDATA[distribuição de conteúdo]]></category>
		<category><![CDATA[integração wordpress]]></category>
		<category><![CDATA[marketing digital b2b]]></category>
		<category><![CDATA[plugin wordpress]]></category>
		<category><![CDATA[whatsapp wordpress]]></category>
		<category><![CDATA[wordpress para empresas]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2355</guid>

					<description><![CDATA[<p>O Notifish é um plugin para WordPress oficialmente aprovado no repositório do WordPress que permite automatizar o envio de conteúdos publicados no site diretamente para o WhatsApp, integrando o fluxo editorial do WordPress a canais de distribuição de alto engajamento. Com a aprovação no diretório oficial, o plugin passa a atender padrões rígidos de segurança, [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/automacao-de-whatsapp-para-wordpress-uma-solucao-escalavel-para-empresas-e-portais/">Automação de WhatsApp para WordPress: uma solução escalável para empresas e portais</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://notifish.com/" target="_blank" rel="noreferrer noopener nofollow">O <strong>Notifish</strong> é um plugin para WordPress </a>oficialmente aprovado no repositório do WordPress que permite <strong>automatizar o envio de conteúdos publicados no site diretamente para o WhatsApp</strong>, integrando o fluxo editorial do WordPress a canais de distribuição de alto engajamento.</p>



<p>Com a aprovação no diretório oficial, o plugin passa a atender <strong>padrões rígidos de segurança, qualidade de código e boas práticas exigidas pela equipe do WordPress</strong>, o que garante mais confiabilidade para quem busca soluções profissionais de distribuição de conteúdo.</p>



<p>👉 Repositório oficial do plugin:<br><a href="https://wordpress.org/plugins/notifish/" target="_blank" rel="noreferrer noopener nofollow">https://wordpress.org/plugins/notifish/</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-que-e-o-plugin-notifish">O que é o plugin Notifish</h2>



<p>O Notifish é um plugin que conecta o WordPress à plataforma Notifish, permitindo que <strong>publicações sejam enviadas automaticamente para grupos, listas ou contatos no <a href="https://leonardonascimento.dev/blog/como-monitorar-aplicacao-e-servidor-pelo-whatsapp-logs-erros-e-alertas/" type="post" id="2290">WhatsApp</a></strong> a partir do momento em que um post é publicado ou atualizado.</p>



<p>Na prática, ele elimina processos manuais comuns em portais, blogs e sites de conteúdo, como copiar links, formatar mensagens e disparar envios individualmente, centralizando tudo dentro do próprio fluxo editorial.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-para-quem-o-notifish-e-indicado">Para quem o Notifish é indicado</h2>



<p>O plugin foi desenvolvido para cenários reais de uso, como:</p>



<ul class="wp-block-list">
<li>Portais de notícias e sites jornalísticos</li>



<li>Blogs com publicação frequente</li>



<li>Produtores de conteúdo e infoprodutores</li>



<li>Empresas que usam WhatsApp como canal de comunicação</li>



<li>Projetos WordPress que dependem de distribuição rápida de conteúdo</li>
</ul>



<p>Em todos esses casos, o WhatsApp deixa de ser apenas um canal complementar e passa a fazer parte da estratégia de publicação.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-como-funciona-a-integracao-com-o-wordpress">Como funciona a integração com o WordPress</h2>



<p>Após a instalação do plugin e a configuração da chave de API, o funcionamento é simples:</p>



<ol class="wp-block-list">
<li>O conteúdo é publicado normalmente no WordPress</li>



<li>O plugin identifica a publicação</li>



<li>O Notifish envia a mensagem para os grupos ou listas configuradas</li>



<li>O envio fica registrado para controle e auditoria</li>
</ol>



<p>Todo o processo acontece de forma transparente para o editor, sem necessidade de ferramentas externas ou fluxos paralelos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-principais-vantagens-do-notifish">Principais vantagens do Notifish</h2>



<h3 class="wp-block-heading" id="h-automacao-real-no-fluxo-editorial">Automação real no fluxo editorial</h3>



<p>O envio das mensagens acontece no momento certo, integrado ao ciclo de publicação, sem depender de ações manuais.</p>



<h3 class="wp-block-heading" id="h-distribuicao-imediata-do-conteudo">Distribuição imediata do conteúdo</h3>



<p>Assim que a matéria vai ao ar, ela já pode ser entregue ao público em um canal com alta taxa de abertura e leitura.</p>



<h3 class="wp-block-heading" id="h-centralizacao-de-operacoes">Centralização de operações</h3>



<p>O <a href="https://leonardonascimento.dev/blog/wordpress-nao-e-amador-amador-e-o-uso-que-fazem-dele/" type="post" id="2338">WordPress </a>deixa de ser apenas um CMS e passa a ser também um ponto central de distribuição de conteúdo.</p>



<h3 class="wp-block-heading" id="h-mais-controle-sobre-comunicacao-via-whatsapp">Mais controle sobre comunicação via WhatsApp</h3>



<p>O uso de automação reduz falhas humanas, duplicidade de envios e inconsistências na comunicação.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-aprovacao-no-repositorio-oficial-do-wordpress">Aprovação no repositório oficial do WordPress</h2>



<p>A presença do Notifish no repositório oficial do WordPress é um ponto relevante, pois indica que o plugin:</p>



<ul class="wp-block-list">
<li>Segue as diretrizes de segurança do WordPress</li>



<li>Utiliza boas práticas de desenvolvimento</li>



<li>Passou por revisão manual da equipe do WordPress</li>



<li>Pode ser instalado e atualizado diretamente pelo painel administrativo</li>
</ul>



<p>Isso reduz riscos técnicos e aumenta a confiabilidade do projeto para uso em produção.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-impacto-em-seo-e-engajamento">Impacto em SEO e engajamento</h2>



<p>Embora o WhatsApp não seja um fator direto de ranqueamento, a automação de distribuição impacta positivamente métricas importantes para SEO, como:</p>



<ul class="wp-block-list">
<li>Aumento de tráfego recorrente</li>



<li>Maior taxa de retorno ao site</li>



<li>Crescimento de engajamento com o conteúdo</li>



<li>Ampliação do alcance orgânico das publicações</li>
</ul>



<p>Em projetos editoriais, isso significa <strong>conteúdo sendo consumido mais rápido e com mais frequência</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-onde-instalar-o-plugin-notifish">Onde instalar o plugin Notifish</h2>



<p>O plugin está disponível no repositório oficial do WordPress e pode ser instalado diretamente pelo painel administrativo ou acessado pelo link abaixo:</p>



<p><a href="https://wordpress.org/plugins/notifish">https://wordpress.org/plugins/notifish</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-consideracoes-finais">Considerações finais</h2>



<p>O Notifish não é apenas um plugin de envio de mensagens, mas uma <strong>ferramenta de integração entre conteúdo e distribuição</strong>, pensada para quem publica com frequência e precisa de escala sem perder controle.</p>



<p>Para sites WordPress que utilizam o WhatsApp como canal estratégico, a automação deixa de ser um diferencial e passa a ser uma necessidade operacional.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/automacao-de-whatsapp-para-wordpress-uma-solucao-escalavel-para-empresas-e-portais/">Automação de WhatsApp para WordPress: uma solução escalável para empresas e portais</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/automacao-de-whatsapp-para-wordpress-uma-solucao-escalavel-para-empresas-e-portais/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PHP além do CRUD: como escrever código que não vira problema em produção</title>
		<link>https://leonardonascimento.dev/blog/php-alem-do-crud-como-escrever-codigo-que-nao-vira-problema-em-producao/</link>
					<comments>https://leonardonascimento.dev/blog/php-alem-do-crud-como-escrever-codigo-que-nao-vira-problema-em-producao/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Mon, 26 Jan 2026 11:05:00 +0000</pubDate>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[arquitetura de software]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[boas práticas]]></category>
		<category><![CDATA[código limpo]]></category>
		<category><![CDATA[dto]]></category>
		<category><![CDATA[engenharia de software]]></category>
		<category><![CDATA[php avançado]]></category>
		<category><![CDATA[services layer]]></category>
		<category><![CDATA[sistemas em produção]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2348</guid>

					<description><![CDATA[<p>A maioria dos desenvolvedores PHP sabe fazer CRUD.Isso não te torna pleno. Muito menos sênior. O que diferencia um dev mais experiente não é o que ele sabe fazer, mas o que ele evita fazer. Vou te ensinar aqui um padrão prático, usado em projetos reais, que resolve três problemas clássicos: public function store(Request $request){if [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/php-alem-do-crud-como-escrever-codigo-que-nao-vira-problema-em-producao/">PHP além do CRUD: como escrever código que não vira problema em produção</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>A maioria dos desenvolvedores PHP sabe fazer CRUD.<br>Isso não te torna pleno. Muito menos sênior.</p>



<p>O que diferencia um dev mais experiente não é <em>o que ele sabe fazer</em>, mas <strong>o que ele evita fazer</strong>.</p>



<p>Vou te ensinar aqui <strong>um padrão prático</strong>, usado em projetos reais, que resolve três problemas clássicos:</p>



<ul class="wp-block-list">
<li>Controllers inchados</li>



<li>Regras de negócio espalhadas</li>



<li>Código impossível de testar ou evoluir</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>public function store(Request $request)<br>{<br>if (!$request-&gt;email) {<br>return response()-&gt;json([&#8216;error&#8217; =&gt; &#8216;Email obrigatório&#8217;], 422);<br>}</p>



<pre class="wp-block-code"><code>$user = User::create(&#91;
    'name' =&gt; $request-&gt;name,
    'email' =&gt; $request-&gt;email,
]);

Mail::to($user-&gt;email)-&gt;send(new WelcomeMail($user));

Log::info('Usuário criado', &#91;'id' =&gt; $user-&gt;id]);

return response()-&gt;json($user);</code></pre>



<p>}</p>



<p>Funciona? Funciona.</p>



<p>É bom? Não.</p>



<p>Por quê?</p>



<ul class="wp-block-list">
<li>Controller decide regra de negócio</li>



<li>Controller cria usuário</li>



<li>Controller dispara e-mail</li>



<li>Controller registra log</li>
</ul>



<p>Isso <strong>acopla tudo</strong>.</p>



<h2 class="wp-block-heading" id="h-pensamento-pleno-senior-separar-responsabilidade">Pensamento pleno/sênior: separar responsabilidade</h2>



<p>Controller <strong>não decide regra</strong>.<br>Controller <strong>orquestra</strong>.</p>



<p>Vamos refatorar com um <strong>Service + DTO</strong>, padrão simples e poderoso.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-criando-um-dto-data-transfer-object">Criando um DTO (Data Transfer Object)</h2>



<p>Isso evita Request sendo usado como regra de negócio.</p>



<pre class="wp-block-code"><code>final class CreateUserDTO
{
    public function __construct(
        public readonly string $name,
        public readonly string $email,
    ) {}
}
</code></pre>



<p>Simples, explícito e tipado.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-criando-o-service-onde-a-regra-mora"> Criando o Service (onde a regra mora)</h2>



<pre class="wp-block-code"><code>final class CreateUserService
{
    public function execute(CreateUserDTO $dto): User
    {
        if (!filter_var($dto-&gt;email, FILTER_VALIDATE_EMAIL)) {
            throw new InvalidArgumentException('Email inválido');
        }

        $user = User::create(&#91;
            'name' =&gt; $dto-&gt;name,
            'email' =&gt; $dto-&gt;email,
        ]);

        Mail::to($user-&gt;email)-&gt;send(new WelcomeMail($user));

        Log::info('Usuário criado', &#91;'id' =&gt; $user-&gt;id]);

        return $user;
    }
}
</code></pre>



<p>Agora sim:</p>



<ul class="wp-block-list">
<li>Regra centralizada</li>



<li>Código reutilizável</li>



<li>Fácil de testar</li>



<li>Fácil de evoluir</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-controller-limpo-como-deveria-ser"> Controller limpo (como deveria ser)</h2>



<pre class="wp-block-code"><code>public function store(Request $request, CreateUserService $service)
{
    $dto = new CreateUserDTO(
        name: $request-&gt;name,
        email: $request-&gt;email
    );

    $user = $service-&gt;execute($dto);

    return response()-&gt;json($user);
}
</code></pre>



<p>O controller:</p>



<ul class="wp-block-list">
<li>Recebe request</li>



<li>Constrói DTO</li>



<li>Chama serviço</li>



<li>Retorna resposta</li>
</ul>



<p>Nada além disso.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">O ganho real (que júnior não enxerga)</h2>



<h3 class="wp-block-heading" id="h-testabilidade">Testabilidade</h3>



<p>Agora você testa a regra <strong>sem framework</strong>:</p>



<pre class="wp-block-code"><code>public function test_user_creation()
{
    $service = new CreateUserService();

    $dto = new CreateUserDTO(
        name: 'Leo',
        email: 'leo@email.com'
    );

    $user = $service-&gt;execute($dto);

    $this-&gt;assertEquals('Leo', $user-&gt;name);
}
</code></pre>



<p>Sem Request.<br>Sem Controller.<br>Sem gambiarra.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-evolucao-sem-dor"> Evolução sem dor</h3>



<p>Amanhã você precisa:</p>



<ul class="wp-block-list">
<li>Enviar evento para fila</li>



<li>Criar usuário em sistema externo</li>



<li>Validar regra nova</li>
</ul>



<p>Você altera <strong>um lugar só</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Mentalidade sênior (isso vale ouro)</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>&#8221; Código que funciona não é código bom.mCódigo bom é o que aguenta mudança.&#8221; </p>
</blockquote>



<p>Pleno/sênior pensa assim:</p>



<ul class="wp-block-list">
<li>Onde essa regra deve morar?</li>



<li>O que vai mudar daqui 6 meses?</li>



<li>Quem vai dar manutenção nisso?</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Erros clássicos que isso evita</h2>



<ul class="wp-block-list">
<li>Fat models</li>



<li>Controllers gigantes</li>



<li>Services que viram controllers</li>



<li>Regra duplicada</li>



<li>Código impossível de refatorar</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Esse tipo de abordagem <strong>não aparece em tutorial de YouTube</strong>, mas é exatamente o que mantém sistemas vivos em produção.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/php-alem-do-crud-como-escrever-codigo-que-nao-vira-problema-em-producao/">PHP além do CRUD: como escrever código que não vira problema em produção</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/php-alem-do-crud-como-escrever-codigo-que-nao-vira-problema-em-producao/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como identificar um projeto WordPress mal feito em 10 minutos</title>
		<link>https://leonardonascimento.dev/blog/como-identificar-um-projeto-wordpress-mal-feito-em-10-minutos/</link>
					<comments>https://leonardonascimento.dev/blog/como-identificar-um-projeto-wordpress-mal-feito-em-10-minutos/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Sun, 25 Jan 2026 11:50:00 +0000</pubDate>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[auditoria wordpress]]></category>
		<category><![CDATA[desenvolvimento wordpress]]></category>
		<category><![CDATA[performance web]]></category>
		<category><![CDATA[projetos wordpress]]></category>
		<category><![CDATA[seo técnico]]></category>
		<category><![CDATA[wordpress profissional]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2345</guid>

					<description><![CDATA[<p>Você não precisa ser especialista nem passar horas auditando código para saber se um projeto WordPress foi mal executado. Em poucos minutos — às vezes em segundos — já dá para identificar sinais claros de problema técnico, dívida acumulada e decisões erradas. Este texto é um guia direto, prático e baseado em experiência real para [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/como-identificar-um-projeto-wordpress-mal-feito-em-10-minutos/">Como identificar um projeto WordPress mal feito em 10 minutos</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Você não precisa ser especialista nem passar horas auditando código para saber se um projeto <a href="https://leonardonascimento.dev/blog/o-que-e-lighthouse-e-como-usar-para-melhorar-seu-site/" type="post" id="2318">WordPress </a>foi mal executado. Em poucos minutos — às vezes em segundos — já dá para identificar sinais claros de problema técnico, dívida acumulada e decisões erradas. Este texto é um guia direto, prático e baseado em experiência real para reconhecer um WordPress mal feito antes que ele vire dor de cabeça.</p>



<h2 class="wp-block-heading" id="h-spoiler-quando-e-ruim-os-sinais-aparecem-rapido">Spoiler: quando é ruim, os sinais aparecem rápido</h2>



<p><a href="https://leonardonascimento.dev/categoria/wordpress">Projetos WordPress mal feitos <strong>não falham em silêncio</strong></a>. Eles deixam rastros.<br>O problema é que muita gente não sabe onde olhar.</p>



<p>Em 10 minutos, você consegue ter uma boa noção se está diante de:</p>



<ul class="wp-block-list">
<li>Um projeto profissional ou uma bomba-relógio disfarçada de site bonito</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-abra-o-site-no-celular-primeiro-minuto"> Abra o site no celular (primeiro minuto)</h2>



<p>Antes de qualquer ferramenta, <strong>abra no mobile</strong>.</p>



<p>Sinais clássicos de problema:</p>



<ul class="wp-block-list">
<li>Site lento para carregar</li>



<li>Layout “pulando”</li>



<li>Texto pequeno ou mal espaçado</li>



<li>Elementos quebrados</li>
</ul>



<p>Se o site já sofre no mobile, o problema geralmente é estrutural — não é “só ajuste fino”.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-inspecione-o-html-2-minutos"> Inspecione o HTML (2 minutos)</h2>



<p>Clique com o botão direito → <em>Inspecionar</em>.</p>



<p>Se você vê:</p>



<ul class="wp-block-list">
<li>Camadas infinitas de <code>&lt;div></code></li>



<li>Classes genéricas e repetidas</li>



<li>Estrutura semântica inexistente</li>



<li>Conteúdo principal perdido no meio do código</li>
</ul>



<p>Isso indica <strong>HTML inflado</strong>, típico de projetos feitos no <em>arrastar e soltar</em>.</p>



<p>HTML ruim é sinal de:</p>



<ul class="wp-block-list">
<li>SEO fraco</li>



<li>Performance ruim</li>



<li>Manutenção difícil</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-veja-quantos-arquivos-css-e-js-sao-carregados-1-minuto">Veja quantos arquivos CSS e JS são carregados (1 minuto)</h2>



<p>Abra a aba <strong>Network</strong> do navegador.</p>



<p>Red flags claras:</p>



<ul class="wp-block-list">
<li>15, 20, 30 arquivos CSS</li>



<li>JS sendo carregado em todas as páginas, sem necessidade</li>



<li>Scripts de plugins que nem aparecem na tela</li>
</ul>



<p>Quanto mais dependência global, <strong>pior a saúde do projeto</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-cheque-a-hierarquia-de-titulos-h1-h2-h3-1-minuto">Cheque a hierarquia de títulos (H1, H2, H3) (1 minuto)</h2>



<p>Use qualquer extensão simples ou até o próprio inspector.</p>



<p>Problemas comuns:</p>



<ul class="wp-block-list">
<li>Mais de um H1</li>



<li>H1 usado como elemento visual</li>



<li>Pulando de H2 para H4</li>



<li>Headings usados só para “aumentar fonte”</li>
</ul>



<p>Isso é um tiro no pé para SEO e acessibilidade.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-abra-o-painel-administrativo-2-minutos"> Abra o painel administrativo (2 minutos)</h2>



<p>Se você tem acesso ao admin, a verdade aparece rápido.</p>



<p>Sinais de alerta:</p>



<ul class="wp-block-list">
<li>15, 30, 50 plugins ativos</li>



<li>Plugins com funções sobrepostas</li>



<li>Plugins abandonados ou sem atualização</li>



<li>Tudo resolvido com plugin, nada com código</li>
</ul>



<p>Projeto bom usa plugin como <strong>ferramenta</strong>, não como muleta.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-de-uma-olhada-no-banco-de-dados-1-minuto">Dê uma olhada no banco de dados (1 minuto)</h2>



<p>Mesmo sem aprofundar, alguns sinais gritam:</p>



<ul class="wp-block-list">
<li>Tabelas demais para um site simples</li>



<li>Prefixos estranhos</li>



<li>Plugins que criaram dezenas de tabelas</li>



<li>Lixo acumulado de plugins removidos</li>
</ul>



<p>Quando um site institucional tem mais de 200 tabelas, <strong>algo está muito errado</strong>. (História real)</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-veja-como-o-cache-esta-sendo-tratado-1-minuto">Veja como o cache está sendo tratado (1 minuto)</h2>



<p>Perguntas simples:</p>



<ul class="wp-block-list">
<li>Tem cache?</li>



<li>Cache é de página, objeto, CDN?</li>



<li>Limpa cache a cada acesso?</li>
</ul>



<p>Cache mal configurado é quase tão ruim quanto não ter cache nenhum.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-observe-como-o-site-reage-a-pequenas-mudancas">Observe como o site reage a pequenas mudanças</h2>



<p>Esse é um teste indireto, mas poderoso.</p>



<p>Pergunte:</p>



<ul class="wp-block-list">
<li>Atualizar um plugin quebra layout?</li>



<li>Trocar tema é inviável?</li>



<li>Qualquer ajuste exige “rezar”?</li>
</ul>



<p>Se sim, o projeto não foi pensado para evoluir.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-padrao-por-tras-de-tudo-isso">O padrão por trás de tudo isso</h2>



<p>Projetos WordPress mal feitos geralmente compartilham a mesma origem:</p>



<ul class="wp-block-list">
<li>Pressa</li>



<li>Preço baixo</li>



<li>Soluções visuais</li>



<li>Falta de base técnica</li>
</ul>



<p>O site até funciona, mas <strong>vive no limite</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-importante-wordpress-nao-e-o-problema">Importante: WordPress não é o problema</h2>



<p>WordPress bem utilizado:</p>



<ul class="wp-block-list">
<li>É rápido</li>



<li>Escala</li>



<li>É estável</li>



<li>Aguenta tráfego</li>



<li>É fácil de manter</li>
</ul>



<p>O problema nunca foi o CMS.<br>O problema é <strong>como ele é usado</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Identificar um projeto WordPress mal feito cedo:</p>



<ul class="wp-block-list">
<li>Evita retrabalho</li>



<li>Evita prejuízo</li>



<li>Evita desgaste com cliente</li>



<li>Evita promessas que não podem ser cumpridas</li>
</ul>



<p>E a melhor parte:<br><strong>você não precisa de ferramenta cara, só de olhar técnico</strong>.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/como-identificar-um-projeto-wordpress-mal-feito-em-10-minutos/">Como identificar um projeto WordPress mal feito em 10 minutos</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/como-identificar-um-projeto-wordpress-mal-feito-em-10-minutos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress não é amador. Amador é o uso que fazem dele.</title>
		<link>https://leonardonascimento.dev/blog/wordpress-nao-e-amador-amador-e-o-uso-que-fazem-dele/</link>
					<comments>https://leonardonascimento.dev/blog/wordpress-nao-e-amador-amador-e-o-uso-que-fazem-dele/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Sat, 24 Jan 2026 12:00:00 +0000</pubDate>
				<category><![CDATA[Seo & Marketing]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[criar site wordpress]]></category>
		<category><![CDATA[drag and drop]]></category>
		<category><![CDATA[elementor]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[seo técnico]]></category>
		<category><![CDATA[wpbakery]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2338</guid>

					<description><![CDATA[<p>WordPress não é lento, frágil ou amador. Ele só ficou mal-falado porque virou refém de más decisões técnicas — principalmente do abuso de construtores visuais do tipo arrastar e soltar. Neste texto, faço uma crítica direta, sem romantização, sobre por que tantos sites WordPress são ruins e quem realmente é o culpado. Vamos começar com [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/wordpress-nao-e-amador-amador-e-o-uso-que-fazem-dele/">WordPress não é amador. Amador é o uso que fazem dele.</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://leonardonascimento.dev/blog/por-que-muitos-sites-estagnam-no-google-mesmo-publicando-com-frequencia/" type="post" id="2301" target="_blank" rel="noreferrer noopener">WordPress </a>não é lento, frágil ou amador. Ele só ficou mal-falado porque virou refém de más decisões técnicas — principalmente do abuso de construtores visuais do tipo <em>arrastar e soltar</em>. Neste texto, faço uma crítica direta, sem romantização, <a href="https://leonardonascimento.dev/categoria/wordpress/" target="_blank" rel="noreferrer noopener">sobre por que tantos sites WordPress são ruins</a> e quem realmente é o culpado.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-vamos-comecar-com-o-obvio-que-ninguem-gosta-de-dizer">Vamos começar com o óbvio que ninguém gosta de dizer</h2>



<p>WordPress move <strong>uma fatia gigantesca da internet</strong>. Portais de notícias, sites institucionais, e-commerces, projetos governamentais e empresas milionárias usam WordPress em produção, com alto tráfego e performance.</p>



<p>Se o WordPress fosse o problema, <strong>esses sites simplesmente não existiriam</strong>.</p>



<p>O que existe, na prática, é outra coisa:<br><strong>WordPress virou terra sem lei técnica.</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-mito-wordpress-e-lento">O mito: “WordPress é lento”</h2>



<p>Não.<br><strong>Lento é o jeito que ele é montado.</strong></p>



<p>WordPress, por padrão:</p>



<ul class="wp-block-list">
<li>Renderiza HTML no servidor</li>



<li>Funciona muito bem com cache</li>



<li>Escala com Cloudflare, CDN e NGINX</li>



<li>Aguenta alto volume quando bem configurado</li>
</ul>



<p>O que deixa o site lento não é o core. É o ecossistema mal utilizado.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-verdadeiro-vilao-o-arrastar-e-soltar">O verdadeiro vilão: o “arrastar e soltar”</h2>



<p>Construtores visuais como Elementor, WPBakery e similares <strong>não são ferramentas neutras</strong>. Eles impõem um modelo de desenvolvimento que cobra um preço alto — e quase sempre invisível para o cliente final.</p>



<h3 class="wp-block-heading" id="h-o-que-realmente-acontece-por-baixo-do-capo">O que realmente acontece por baixo do capô</h3>



<p>Um site feito com <em>drag and drop</em> geralmente entrega:</p>



<ul class="wp-block-list">
<li>HTML inflado, sem semântica</li>



<li>CSS duplicado, inline, desorganizado</li>



<li>JavaScript carregado em excesso</li>



<li>Dependência de dezenas de scripts globais</li>



<li>Layouts quebradiços fora do editor</li>
</ul>



<p>Tudo isso para resolver algo simples: <strong>posicionar bloco na tela</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-problema-nao-e-o-plugin-e-o-conceito">O problema não é o plugin. É o conceito.</h2>



<p>Construtores visuais vendem a ideia de “qualquer um pode criar um site”.<br>Tecnicamente, isso é verdade.<br>Profissionalmente, é um desastre.</p>



<p>Criar um site não é:</p>



<ul class="wp-block-list">
<li>Arrastar caixa</li>



<li>Escolher fonte</li>



<li>Mudar cor</li>
</ul>



<p>Criar um site é:</p>



<ul class="wp-block-list">
<li>Pensar estrutura</li>



<li>Performance</li>



<li>SEO</li>



<li>Manutenção</li>



<li>Evolução futura</li>
</ul>



<p>E nisso, <em>drag and drop</em> falha e falha muito.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-seo-sofre-e-muito">SEO sofre (e muito)</h2>



<p>Sites feitos com construtores visuais costumam ter:</p>



<ul class="wp-block-list">
<li>Hierarquia de headings quebrada</li>



<li>Conteúdo diluído em divs sem sentido</li>



<li>HTML difícil de interpretar para crawlers</li>



<li>Tempo de carregamento alto no mobile</li>
</ul>



<p>Depois, o cliente culpa:</p>



<ul class="wp-block-list">
<li>O Google</li>



<li>O WordPress</li>



<li>O servidor</li>



<li>O SEO</li>
</ul>



<p>Quando, na verdade, o problema nasceu no layout.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-manutencao-vira-um-inferno-silencioso">Manutenção vira um inferno silencioso</h2>



<p>Todo site precisa evoluir.<br>E é aqui que o <em>arrastar e soltar</em> cobra a conta.</p>



<ul class="wp-block-list">
<li>Atualização quebra layout</li>



<li>Plugin vira dependência crítica</li>



<li>Migrar tema vira pesadelo</li>



<li>Refatorar é praticamente impossível</li>
</ul>



<p>O site funciona… até o dia que não funciona mais.</p>



<p>E quando dá problema, ninguém quer mexer.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-mas-e-mais-rapido-desenvolver">“Mas é mais rápido desenvolver”</h2>



<p>É mais rápido <strong>entregar</strong>.<br>Não é mais rápido <strong>manter</strong>.</p>



<p>Construtores visuais economizam horas no início e <strong>custam meses no futuro</strong>.<br>É dívida técnica disfarçada de produtividade.</p>



<p>A culpa também acaba sendo do cliente, que pretende lançar seu negócio em 1 semana e acha um &#8216;programador wordpress&#8217; que entrega o projeto em 3 dias por menos de R$ 500 (História real)</p>



<p>Cansei de refazer sites em WordPress que foram utilizados &#8216;arrastar e soltar&#8217;, quando falo para o cliente que não da para aproveitar nada, ele ainda fica bravo comigo.</p>



<p>Na verdade não deveria estar fazendo essa crítica, poque é muito bom refazer esses sites, você refaz o tema, olha o banco de dados e tem lá mais de 245 tabelas para um portal de notícias regional ou até mesmo institucional (Mais uma história real), com certeza não saiu por R$ 500</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-wordpress-bem-feito-e-outra-historia">WordPress bem feito é outra história</h2>



<p>Quando WordPress é usado como deve ser:</p>



<ul class="wp-block-list">
<li>Tema enxuto</li>



<li>PHP bem estruturado</li>



<li>HTML semântico</li>



<li>CSS organizado</li>



<li>JS apenas quando necessário</li>



<li>Cache correto</li>



<li>Integração com CDN</li>
</ul>



<p>O resultado é:</p>



<ul class="wp-block-list">
<li>Site rápido</li>



<li>SEO limpo</li>



<li>Fácil de manter</li>



<li>Fácil de evoluir</li>



<li>Profissional</li>
</ul>



<p>Isso não aparece em tutorial de “site em 30 minutos”.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-mercado-criou-o-problema-e-culpa-a-ferramenta">O mercado criou o problema — e culpa a ferramenta</h2>



<p>O que estragou a reputação do WordPress não foi o WordPress.</p>



<p>Foi:</p>



<ul class="wp-block-list">
<li>Freelancer sem base técnica</li>



<li>Agência vendendo atalho</li>



<li>Cliente buscando preço, não solução</li>



<li>Cultura do “funciona, então tá bom”</li>
</ul>



<p>O <em>arrastar e soltar</em> só acelerou esse processo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-wordpress-nao-e-amador-o-uso-dele-que-e">WordPress não é amador — o uso dele que é</h2>



<p>WordPress é uma ferramenta poderosa.<br>Mas ferramenta boa <strong>na mão errada vira problema</strong>.</p>



<p>Se você quer:</p>



<ul class="wp-block-list">
<li>Performance</li>



<li>SEO</li>



<li>Escalabilidade</li>



<li>Longevidade</li>
</ul>



<p>Então pare de tratar WordPress como brinquedo visual.</p>



<p>Porque no fim, não é o CMS que define a qualidade do site.<br>É <strong>quem está por trás das decisões técnicas</strong>.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/wordpress-nao-e-amador-amador-e-o-uso-que-fazem-dele/">WordPress não é amador. Amador é o uso que fazem dele.</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/wordpress-nao-e-amador-amador-e-o-uso-que-fazem-dele/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>10 inteligências artificiais que você não pode ignorar em 2026</title>
		<link>https://leonardonascimento.dev/blog/10-inteligencias-artificiais-que-voce-nao-pode-ignorar-em-2026/</link>
					<comments>https://leonardonascimento.dev/blog/10-inteligencias-artificiais-que-voce-nao-pode-ignorar-em-2026/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 21:25:00 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Seo & Marketing]]></category>
		<category><![CDATA[automação]]></category>
		<category><![CDATA[ferramentas de ia]]></category>
		<category><![CDATA[futuro da tecnologia]]></category>
		<category><![CDATA[ia 2026]]></category>
		<category><![CDATA[inovação digital]]></category>
		<category><![CDATA[inteligência artificial]]></category>
		<category><![CDATA[sites de ia]]></category>
		<category><![CDATA[tecnologia 2025]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2335</guid>

					<description><![CDATA[<p>De assistentes que escrevem códigos a geradores de vídeos e músicas em segundos, essas inteligências artificiais estão definindo o ritmo da inovação digital. Conheça as ferramentas que estão revolucionando a produtividade, a criação de conteúdo e o próprio jeito de trabalhar.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/10-inteligencias-artificiais-que-voce-nao-pode-ignorar-em-2026/">10 inteligências artificiais que você não pode ignorar em 2026</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>De assistentes que escrevem códigos a geradores de vídeos e músicas em segundos, essas inteligências artificiais estão definindo o ritmo da inovação digital. Conheça as ferramentas que estão revolucionando a produtividade, a criação de conteúdo e o próprio jeito de trabalhar.</p>



<p><strong>1. Claude.ai — o cérebro que resolve tudo</strong><br>Criado pela Anthropic, o Claude é o rival direto do ChatGPT, e muitos juram que ele é ainda mais “humano”. Capaz de entender contextos complexos, revisar textos longos e até analisar documentos inteiros, o Claude virou o companheiro ideal para quem precisa de precisão e agilidade.</p>



<p><strong>2. Ranked.ai — o impulso para o topo do Google</strong><br>Essa IA é uma bênção para quem vive de SEO. Ela analisa, sugere e otimiza o conteúdo do seu site para conquistar posições valiosas nos resultados de busca. O melhor? Faz isso praticamente sozinha, com atualizações em tempo real.</p>



<p><strong>3. Syllaby.io — vídeos prontos para bombar</strong><br>Quer transformar roteiros em conteúdo de vídeo automático? O Syllaby faz isso com maestria. Ele cria, edita e entrega vídeos completos com narração e legenda, otimizados para TikTok, Reels e Shorts. Um aliado de peso para criadores e marcas.</p>



<p><strong>4. Replit.com — código sem complicação</strong><br>Mais do que um simples editor, o Replit é um ambiente de desenvolvimento guiado por IA. Ele escreve código, corrige bugs e até explica o que você está fazendo errado. É como ter um mentor de programação disponível 24 horas.</p>



<p><strong>5. Manus.im — o superagente inteligente</strong><br>Considerada uma das plataformas mais versáteis, o Manus é um agente de IA que centraliza tarefas: pesquisa, escrita, automação e até integração entre apps. Tudo num só lugar, com interface intuitiva e resultados rápidos.</p>



<p><strong>6. Suno.com — música em segundos</strong><br>Aqui, criatividade e tecnologia tocam juntos. O Suno permite criar faixas completas em poucos cliques, combinando estilos e vozes realistas. Ideal para trilhas de vídeos, podcasts ou simplesmente para quem quer experimentar novos sons.</p>



<p><strong>7. Fliki.ai — texto que vira vídeo</strong><br>Pegue um texto simples e veja ele se transformar em conteúdo visual dinâmico. O Fliki gera vídeos curtos, prontos para redes sociais, com narração natural e variedade de estilos. Um presente para quem quer produção rápida sem perder qualidade.</p>



<p><strong>8. CloudXLR.com — o construtor de apps definitivo</strong><br>Essa plataforma é o sonho de empreendedores e desenvolvedores. A CloudXLR usa IA para montar aplicativos completos, desde o design até a lógica interna, sem exigir uma linha de código manual.</p>



<p><strong>9. Genspark.ai — o superagente da produtividade</strong><br>Genspark é como um estagiário genial: escreve, pesquisa, planeja, organiza e ainda gera relatórios. Ele funciona como uma central de automação pessoal, perfeita para quem gerencia muitas tarefas ao mesmo tempo.</p>



<p><strong>10. Fastread.io — eBooks na velocidade da luz</strong><br>Produzir um livro digital nunca foi tão rápido. O Fastread cria, formata e finaliza eBooks a partir de poucos tópicos, com estrutura profissional e linguagem envolvente.</p>



<p>Bônus extra</p>



<ul class="wp-block-list">
<li><strong>Perplexity</strong> — busca com IA que realmente responde, citando fontes.</li>



<li><strong>ElevenLabs</strong> — vozes artificiais extremamente naturais.</li>



<li><strong>Pika</strong> — geração de vídeos criativos com IA generativa.</li>
</ul>
<p>The post <a href="https://leonardonascimento.dev/blog/10-inteligencias-artificiais-que-voce-nao-pode-ignorar-em-2026/">10 inteligências artificiais que você não pode ignorar em 2026</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/10-inteligencias-artificiais-que-voce-nao-pode-ignorar-em-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AMP: o que é, para que serve, ainda vale a pena usar?</title>
		<link>https://leonardonascimento.dev/blog/amp-o-que-e-para-que-serve-ainda-vale-a-pena-usar/</link>
					<comments>https://leonardonascimento.dev/blog/amp-o-que-e-para-que-serve-ainda-vale-a-pena-usar/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Thu, 22 Jan 2026 09:51:00 +0000</pubDate>
				<category><![CDATA[Backend]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Seo & Marketing]]></category>
		<category><![CDATA[amp]]></category>
		<category><![CDATA[core web vitals]]></category>
		<category><![CDATA[experiência do usuário]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[performance mobile]]></category>
		<category><![CDATA[seo técnico]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2322</guid>

					<description><![CDATA[<p>Durante alguns anos, o AMP foi tratado como solução quase obrigatória para quem queria desempenho e visibilidade no mobile. Depois, passou a ser visto como algo ultrapassado ou até prejudicial. Como quase tudo em tecnologia, a verdade está no meio. Antes de decidir usar ou abandonar AMP, é preciso entender o problema que ele tentou [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/amp-o-que-e-para-que-serve-ainda-vale-a-pena-usar/">AMP: o que é, para que serve, ainda vale a pena usar?</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Durante alguns anos, o AMP foi tratado como solução quase obrigatória para quem queria desempenho e visibilidade no mobile. Depois, passou a ser visto como algo ultrapassado ou até prejudicial. Como quase tudo em tecnologia, a verdade está no meio.</p>



<p>Antes de decidir usar ou abandonar AMP, é preciso entender <strong>o problema que ele tentou resolver</strong>, <strong>quem o criou</strong> e <strong>o que mudou desde então</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-que-e-amp">O que é AMP</h2>



<p>AMP (Accelerated Mobile Pages) é um framework criado para <strong>entregar páginas extremamente rápidas no mobile</strong>, com um conjunto restrito de HTML, CSS e JavaScript. A ideia central é reduzir ao máximo tudo que pode atrasar o carregamento.</p>



<p>Na prática, páginas AMP:</p>



<ul class="wp-block-list">
<li>carregam com menos recursos</li>



<li>têm layout mais previsível</li>



<li>priorizam conteúdo acima de scripts</li>
</ul>



<p>O foco sempre foi <strong>experiência</strong>, não estética ou flexibilidade.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-quem-criou-o-amp-e-por-que">Quem criou o AMP e por quê</h2>



<p>O AMP foi criado pelo <strong>Google</strong>, em parceria com outros players, por volta de 2015. Naquele período, a web mobile era lenta, pesada e inconsistente. Sites abusavam de scripts, anúncios e trackers, e a experiência no celular era ruim.</p>



<p>O AMP surgiu como uma resposta direta a isso: impor limites para forçar desempenho.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-para-que-o-amp-realmente-serve">Para que o AMP realmente serve</h2>



<p>O AMP serve para <strong>garantir carregamento rápido e previsível</strong>, especialmente em:</p>



<ul class="wp-block-list">
<li>notícias</li>



<li>artigos</li>



<li>conteúdos informativos</li>



<li>páginas públicas e abertas</li>
</ul>



<p>Ele nunca foi pensado para:</p>



<ul class="wp-block-list">
<li>aplicações complexas</li>



<li>áreas autenticadas</li>



<li>e-commerces completos</li>



<li>experiências altamente interativas</li>
</ul>



<p>Quando usado fora do escopo, costuma frustrar.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-auge-do-amp-e-a-associacao-com-seo">O auge do AMP e a associação com SEO</h2>



<p>Durante um período, o AMP foi fortemente associado a vantagens de visibilidade, especialmente em carrosséis de notícias no mobile. Isso criou a percepção de que “usar AMP ajuda no ranking”.</p>



<p>Com o tempo, o Google deixou claro que <strong>não é o AMP em si que melhora SEO</strong>, mas sim os <strong>sinais de experiência</strong> (velocidade, estabilidade, interatividade). A partir daí, o AMP deixou de ser requisito e passou a ser apenas uma opção.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-que-mudou-nos-ultimos-anos">O que mudou nos últimos anos</h2>



<p>Hoje, tecnologias modernas permitem alcançar desempenho semelhante ao AMP sem suas limitações:</p>



<ul class="wp-block-list">
<li>frameworks mais leves</li>



<li>melhor uso de cache</li>



<li>CDN em borda</li>



<li>Core Web Vitals como métrica oficial</li>
</ul>



<p>Além disso, o próprio Google passou a priorizar <strong>experiência medida</strong>, não tecnologia usada.</p>



<p>Resultado: AMP deixou de ser obrigatório e virou <strong>decisão estratégica</strong>, não padrão.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-as-principais-vantagens-do-amp">As principais vantagens do AMP</h2>



<p>Quando bem aplicado, o AMP ainda entrega benefícios reais:</p>



<ul class="wp-block-list">
<li>carregamento quase instantâneo no mobile</li>



<li>layout estável (baixo CLS)</li>



<li>menor consumo de dados</li>



<li>previsibilidade de performance</li>
</ul>



<p>Para sites focados em leitura rápida, isso pode ser relevante.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-as-limitacoes-e-por-que-muita-gente-abandonou">As limitações (e por que muita gente abandonou)</h2>



<p>O AMP impõe restrições que incomodam em projetos mais maduros:</p>



<ul class="wp-block-list">
<li>menos controle sobre JavaScript</li>



<li>personalização limitada</li>



<li>integrações mais complexas</li>



<li>dependência maior de cache externo</li>
</ul>



<p>Além disso, manter <strong>duas versões</strong> (AMP e não-AMP) aumenta custo de manutenção.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-amp-vale-a-pena-hoje">AMP vale a pena hoje?</h2>



<p>Depende do tipo de site.</p>



<p>Pode fazer sentido se:</p>



<ul class="wp-block-list">
<li>o foco é conteúdo informativo</li>



<li>o público é majoritariamente mobile</li>



<li>a equipe é pequena</li>



<li>performance ainda é um problema sério</li>
</ul>



<p>Provavelmente não vale se:</p>



<ul class="wp-block-list">
<li>o site já tem bom desempenho mobile</li>



<li>há muita interatividade</li>



<li>o projeto depende de lógica complexa</li>



<li>o time consegue otimizar sem AMP</li>
</ul>



<p>AMP não é solução universal. É ferramenta específica.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-como-medir-engajamento-em-paginas-amp">Como medir engajamento em páginas AMP</h2>



<p>Aqui está um ponto crítico: <strong>muita gente mede errado</strong>.</p>



<h3 class="wp-block-heading" id="h-metricas-que-fazem-sentido">Métricas que fazem sentido</h3>



<ul class="wp-block-list">
<li>tempo médio na página</li>



<li>scroll depth</li>



<li>taxa de retorno</li>



<li>cliques em links internos</li>



<li>eventos de leitura (ex.: 50%, 75%, 100%)</li>
</ul>



<p>Essas métricas mostram se o usuário <strong>consumiu o conteúdo</strong>, não apenas se carregou rápido.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-atencao-a-fragmentacao-de-dados">Atenção à fragmentação de dados</h3>



<p>AMP pode gerar URLs diferentes e cache intermediário. Isso exige cuidado para:</p>



<ul class="wp-block-list">
<li>consolidar métricas corretamente</li>



<li>evitar duplicação de sessões</li>



<li>manter rastreamento consistente</li>
</ul>



<p>Sem isso, o engajamento parece pior (ou melhor) do que realmente é.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-amp-nao-substitui-estrategia-de-performance">AMP não substitui estratégia de performance</h2>



<p>Um erro comum é usar AMP como atalho para não otimizar o site principal. Isso cria uma falsa sensação de qualidade.</p>



<p>AMP deve ser:</p>



<ul class="wp-block-list">
<li>complemento</li>



<li>experimento</li>



<li>ou solução pontual</li>
</ul>



<p>Nunca muleta permanente.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-conclusao">Conclusão</h2>



<p>O AMP nasceu para resolver um problema real da web mobile e cumpriu bem esse papel. Com a evolução das tecnologias e das métricas de experiência, ele deixou de ser obrigatório, mas não se tornou inútil.</p>



<p>Hoje, usar AMP é uma <strong>decisão consciente</strong>, não uma regra. Vale para alguns contextos, é desnecessário para outros. O que realmente importa é entregar uma experiência rápida, estável e previsível — com ou sem AMP.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/amp-o-que-e-para-que-serve-ainda-vale-a-pena-usar/">AMP: o que é, para que serve, ainda vale a pena usar?</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/amp-o-que-e-para-que-serve-ainda-vale-a-pena-usar/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>O que é Lighthouse e como usar para melhorar seu site</title>
		<link>https://leonardonascimento.dev/blog/o-que-e-lighthouse-e-como-usar-para-melhorar-seu-site/</link>
					<comments>https://leonardonascimento.dev/blog/o-que-e-lighthouse-e-como-usar-para-melhorar-seu-site/#respond</comments>
		
		<dc:creator><![CDATA[Leonardo]]></dc:creator>
		<pubDate>Wed, 21 Jan 2026 23:20:00 +0000</pubDate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Produção]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Seo & Marketing]]></category>
		<category><![CDATA[core web vitals]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[lighthouse]]></category>
		<category><![CDATA[otimização de sites]]></category>
		<category><![CDATA[performance web]]></category>
		<category><![CDATA[seo técnico]]></category>
		<guid isPermaLink="false">https://leonardonascimento.dev/?p=2318</guid>

					<description><![CDATA[<p>Performance, acessibilidade e boas práticas deixaram de ser “detalhes técnicos” e passaram a impactar diretamente tráfego, conversão e experiência do usuário. Para ajudar a medir esses pontos de forma objetiva, o Google criou o Google Lighthouse. Mais do que uma nota colorida, o Lighthouse é uma ferramenta de diagnóstico. Saber usá-lo corretamente evita decisões erradas [&#8230;]</p>
<p>The post <a href="https://leonardonascimento.dev/blog/o-que-e-lighthouse-e-como-usar-para-melhorar-seu-site/">O que é Lighthouse e como usar para melhorar seu site</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Performance, acessibilidade e boas práticas deixaram de ser “detalhes técnicos” e passaram a impactar diretamente tráfego, conversão e experiência do usuário. Para ajudar a medir esses pontos de forma objetiva, o Google criou o <strong>Google Lighthouse</strong>.</p>



<p>Mais do que uma nota colorida, o Lighthouse é uma ferramenta de diagnóstico. Saber usá-lo corretamente evita decisões erradas e otimizações inúteis.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-que-e-o-lighthouse">O que é o Lighthouse</h2>



<p>O Lighthouse é uma ferramenta automatizada de auditoria de páginas web. Ele analisa uma URL e gera um relatório com métricas e recomendações em cinco áreas principais:</p>



<ul class="wp-block-list">
<li><strong>Performance</strong></li>



<li><strong>Acessibilidade</strong></li>



<li><strong>Boas práticas</strong></li>



<li><strong>SEO</strong></li>



<li><strong>Progressive Web App (PWA)</strong></li>
</ul>



<p>O objetivo não é apenas pontuar o site, mas mostrar <strong>onde estão os gargalos reais</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-onde-o-lighthouse-esta-disponivel">Onde o Lighthouse está disponível</h2>



<p>Você pode usar o Lighthouse de várias formas:</p>



<ul class="wp-block-list">
<li><strong>Chrome DevTools</strong> (nativo do navegador)</li>



<li><strong>Linha de comando (CLI)</strong></li>



<li><strong>CI/CD</strong> (auditorias automatizadas)</li>



<li><strong>Ferramentas online baseadas no Lighthouse</strong></li>
</ul>



<p>Para a maioria dos casos, o DevTools já resolve bem.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-como-rodar-o-lighthouse-pelo-chrome">Como rodar o Lighthouse pelo Chrome</h2>



<ol class="wp-block-list">
<li>Abra o site no Chrome</li>



<li>Pressione <code>F12</code> ou <code>Ctrl + Shift + I</code></li>



<li>Vá até a aba <strong>Lighthouse</strong></li>



<li>Escolha o tipo de dispositivo (Mobile ou Desktop)</li>



<li>Clique em <strong>Generate report</strong></li>
</ol>



<p>Em poucos segundos, o relatório é gerado.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-as-metricas-mais-importantes-e-o-que-elas-significam">As métricas mais importantes (e o que elas significam)</h2>



<h3 class="wp-block-heading" id="h-performance">Performance</h3>



<p>Avalia tempo de carregamento e resposta da página. Algumas métricas-chave:</p>



<ul class="wp-block-list">
<li><strong>LCP (Largest Contentful Paint)</strong><br>Mede quando o maior elemento visível aparece. Impacta diretamente a percepção de velocidade.</li>



<li><strong>INP (Interaction to Next Paint)</strong><br>Avalia a resposta do site às interações do usuário.</li>



<li><strong>CLS (Cumulative Layout Shift)</strong><br>Mede instabilidade visual (elementos “pulando” na tela).</li>
</ul>



<p>Essas métricas fazem parte do <strong>Core Web Vitals</strong>, usados pelo Google como sinal de experiência.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-acessibilidade">Acessibilidade</h3>



<p>Verifica se o site pode ser usado por pessoas com limitações visuais, motoras ou cognitivas. Exemplos de checagem:</p>



<ul class="wp-block-list">
<li>contraste de cores</li>



<li>textos alternativos em imagens</li>



<li>labels em formulários</li>



<li>estrutura semântica do HTML</li>
</ul>



<p>Mesmo que não seja um requisito legal em todos os casos, acessibilidade melhora usabilidade para todos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-boas-praticas">Boas práticas</h3>



<p>Aqui entram problemas mais técnicos, como:</p>



<ul class="wp-block-list">
<li>uso de APIs inseguras</li>



<li>imagens com proporções erradas</li>



<li>erros de console</li>



<li>bibliotecas desatualizadas</li>
</ul>



<p>É uma área que ajuda a manter o site saudável ao longo do tempo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-seo">SEO</h3>



<p>O Lighthouse não substitui ferramentas avançadas de SEO, mas valida o básico:</p>



<ul class="wp-block-list">
<li>meta tags essenciais</li>



<li>indexabilidade</li>



<li>uso correto de links</li>



<li>estrutura mínima de conteúdo</li>
</ul>



<p>Se o site falha aqui, dificilmente terá bom desempenho orgânico.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-o-erro-mais-comum-otimizar-so-para-a-nota">O erro mais comum: otimizar só para a nota</h2>



<p>Muita gente usa o Lighthouse como competição de pontuação. Isso é um erro.</p>



<p>Um site pode ter nota 100 e ainda assim:</p>



<ul class="wp-block-list">
<li>carregar dados desnecessários</li>



<li>ter arquitetura ruim</li>



<li>sofrer em cenários reais de tráfego</li>
</ul>



<p>O relatório deve ser lido como <strong>ferramenta de diagnóstico</strong>, não como objetivo final.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-mobile-vs-desktop-sempre-priorize-mobile">Mobile vs Desktop: sempre priorize mobile</h2>



<p>O Google avalia sites com <strong>mobile-first indexing</strong>. Isso significa que:</p>



<ul class="wp-block-list">
<li>o relatório mobile é mais relevante</li>



<li>problemas no mobile impactam mais SEO</li>



<li>otimizações devem começar pelo mobile</li>
</ul>



<p>Um site rápido no desktop e lento no celular está em desvantagem.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-lighthouse-em-producao-e-ci-cd">Lighthouse em produção e CI/CD</h2>



<p>Em projetos mais maduros, o Lighthouse pode rodar automaticamente:</p>



<ul class="wp-block-list">
<li>antes de deploy</li>



<li>após mudanças críticas</li>



<li>em pipelines de CI/CD</li>
</ul>



<p>Isso ajuda a evitar regressões de performance e garante que melhorias não sejam perdidas com o tempo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-limitacoes-do-lighthouse">Limitações do Lighthouse</h2>



<p>Apesar de poderoso, o Lighthouse tem limites:</p>



<ul class="wp-block-list">
<li>roda em ambiente controlado</li>



<li>não reflete todos os cenários reais</li>



<li>não substitui métricas de usuários reais (RUM)</li>
</ul>



<p>O ideal é combiná-lo com dados reais de uso, como relatórios de experiência de campo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-quando-o-lighthouse-faz-mais-diferenca">Quando o Lighthouse faz mais diferença</h2>



<p>Ele é especialmente útil para:</p>



<ul class="wp-block-list">
<li>identificar gargalos iniciais de performance</li>



<li>validar mudanças estruturais</li>



<li>educar times sobre impacto técnico</li>



<li>criar baseline de qualidade</li>
</ul>



<p>Não é uma bala de prata, mas é um excelente ponto de partida.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>O Lighthouse não serve para “tirar nota alta”, mas para <strong>entender como o site se comporta</strong> do ponto de vista do usuário. Quando usado com critério, ele direciona otimizações que realmente fazem diferença.</p>



<p>Ignorá-lo pode custar performance, experiência e visibilidade. Usá-lo mal pode custar tempo. O valor está em interpretar os dados, não apenas executá-los.</p>
<p>The post <a href="https://leonardonascimento.dev/blog/o-que-e-lighthouse-e-como-usar-para-melhorar-seu-site/">O que é Lighthouse e como usar para melhorar seu site</a> appeared first on <a href="https://leonardonascimento.dev">Leonardo Nascimento | Engenheiro de Software</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://leonardonascimento.dev/blog/o-que-e-lighthouse-e-como-usar-para-melhorar-seu-site/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
