<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog · Haruo</title><description>Contas fechadas, medições e erros que custaram caro, em engenharia de software, IA e automação.</description><link>https://haruo.dev/blog/</link><language>pt-BR</language><atom:link href="https://haruo.dev/rss.xml" rel="self" type="application/rss+xml"/><item><title>Detecção de fraude documental sem ML: a defesa do engine determinístico</title><link>https://haruo.dev/blog/fraude-documental-sem-ml-engine-deterministico/</link><guid isPermaLink="true">https://haruo.dev/blog/fraude-documental-sem-ml-engine-deterministico/</guid><description>Mesmos bytes na entrada, mesmo relatório na saída — sem GPU, sem modelo, sem chamada externa. Por que um engine de regras vence ML neste domínio específico, e a engenharia que a promessa exige: relógio injetado, pesos versionados, score com semântica e um motor proibido de dar veredicto.</description><pubDate>Thu, 24 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Um design system de três arquivos CSS, sem build</title><link>https://haruo.dev/blog/design-system-de-3-arquivos-css-sem-build/</link><guid isPermaLink="true">https://haruo.dev/blog/design-system-de-3-arquivos-css-sem-build/</guid><description>Três front-ends incompatíveis — Astro, HTML estático, HTML montado em Python — e uma marca só. A resposta não foi um framework: tokens.css, primitives.css e um theme.css gerado, adotados por cópia versionada com um check no CI. As decisões, com os porquês medidos.</description><pubDate>Tue, 22 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Stripe: cobrar em reais e em dólar no mesmo produto com currency_options</title><link>https://haruo.dev/blog/stripe-cobrar-em-reais-e-dolar-no-mesmo-produto/</link><guid isPermaLink="true">https://haruo.dev/blog/stripe-cobrar-em-reais-e-dolar-no-mesmo-produto/</guid><description>Como um SaaS cobra o mesmo plano em dólar e em real no Stripe sem duplicar preço: um único Price com currency_options (nunca &apos;Add another price&apos;, que cria um id novo e quebra o mapeamento do webhook), cotação server-side pela moeda que o cartão vai pagar, e as duas idempotências que o webhook precisa — marca-d&apos;água para mudança de plano, PRIMARY KEY para crédito. Contado pelo billing real do Tamperlens, com cada afirmação sobre o Stripe conferida na documentação oficial em 25/08/2026.</description><pubDate>Mon, 21 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Site estático no Cloudflare Pages: a migração que desligou containers</title><link>https://haruo.dev/blog/site-estatico-no-cloudflare-pages/</link><guid isPermaLink="true">https://haruo.dev/blog/site-estatico-no-cloudflare-pages/</guid><description>Como hospedar um site estático no Cloudflare Pages — contado por uma migração real: um app Next.js com Postgres, admin e rotas de API virou export estático com os dados num JSON de ~270 KB lido pelo browser, e os dois containers que o rodavam foram desligados. O critério para saber se um app &apos;dinâmico&apos; é na verdade estático (escreve alguém além do dono?), o caminho da migração, o checklist de desligamento que não deixa hostname órfão envenenando o Search Console, o que se perde na conversão — e quanto custa (preços e limites públicos conferidos em 25/08/2026).</description><pubDate>Sat, 19 Sep 2026 12:00:00 GMT</pubDate></item><item><title>30 dias solo, do primeiro commit ao Stripe live: a ordem que importou</title><link>https://haruo.dev/blog/30-dias-do-primeiro-commit-ao-stripe-live/</link><guid isPermaLink="true">https://haruo.dev/blog/30-dias-do-primeiro-commit-ao-stripe-live/</guid><description>O primeiro commit foi o plano, o deploy aconteceu na primeira hora, e a cobrança real foi verificada no dia 3 — com cartão de verdade e refund. A cronologia de 30 dias e 271 commits do Tamperlens, contada pelas decisões de sequência que valem para qualquer produto solo.</description><pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Runner self-hosted do GitHub Actions com Docker: o setup que sobrevive a billing</title><link>https://haruo.dev/blog/runner-self-hosted-github-actions-docker/</link><guid isPermaLink="true">https://haruo.dev/blog/runner-self-hosted-github-actions-docker/</guid><description>Como montar um runner self-hosted do GitHub Actions numa VPS, com toda ferramenta rodando em contêiner Docker e nada instalado no host — contado pelo desenho real de uma caixa que roda três runners, um por repositório, depois que a cota de minutos hospedados acabou. Os dois padrões de contêiner (montagem read-only + cópia, ou --user com HOME=/tmp), o deploy com rollback autorizado por um único script no sudoers, por que a documentação oficial do GitHub manda quase nunca usar runner self-hosted em repositório público (conferida em 25/08/2026), e a guarda de cota que avisa aos 80% — antes do próximo apagão.</description><pubDate>Tue, 15 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Como criar um community node do n8n do zero: do scaffold ao Creator Portal</title><link>https://haruo.dev/blog/como-criar-um-community-node-do-n8n/</link><guid isPermaLink="true">https://haruo.dev/blog/como-criar-um-community-node-do-n8n/</guid><description>O caminho completo para criar um node do n8n: o contrato do package.json, declarativo vs programático, o CLI n8n-node, o execute() por item com pairedItem, a credencial que injeta a chave sem o node vê-la, binário em vez de caminho de arquivo, publicação por GitHub Actions com provenance e a submissão ao Creator Portal — com um node real e público como mapa, e cada afirmação sobre o processo conferida na doc oficial da n8n em 25/08/2026.</description><pubDate>Mon, 14 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Backup de VPS: o desenho 3-2-1 numa caixa só</title><link>https://haruo.dev/blog/backup-de-vps-desenho-3-2-1/</link><guid isPermaLink="true">https://haruo.dev/blog/backup-de-vps-desenho-3-2-1/</guid><description>Como aplicar a regra 3-2-1 de backup a uma única VPS: dumps consistentes na própria caixa, o backup automático do provedor como segunda cópia (na Hetzner: 20% do plano por 7 cópias diárias) — e por que ele não conta como cópia externa —, mais o pull noturno que leva os dados para fora do provedor. Com o custo de cada camada em preços públicos, conferidos em 25/08/2026.</description><pubDate>Sat, 12 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Um n8n community node verificado: as regras que o docs não enfatiza</title><link>https://haruo.dev/blog/n8n-community-node-verificado/</link><guid isPermaLink="true">https://haruo.dev/blog/n8n-community-node-verificado/</guid><description>Zero dependências de runtime, binário em vez de caminho de arquivo, publicação só por CI com provenance — e a tarde inteira que o OIDC do npm custou. O que a verificação de um community node realmente exige, com os erros na ordem em que aconteceram.</description><pubDate>Thu, 10 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Como funciona o Cloudflare Access: admin protegido sem tela de login própria</title><link>https://haruo.dev/blog/cloudflare-access-como-funciona/</link><guid isPermaLink="true">https://haruo.dev/blog/cloudflare-access-como-funciona/</guid><description>Como funciona o Cloudflare Access na prática: a borda autentica (SSO ou PIN por e-mail), injeta um JWT assinado no header, e o painel admin ganha login sem uma tela própria. O desenho usado em dois admins reais — um app de terceiros e um app próprio —, o erro comum de confiar no proxy sem validar o token, por que falhar fechado importa, e quando NÃO usar. Nomenclatura e preços públicos conferidos na documentação da Cloudflare em 25/08/2026.</description><pubDate>Tue, 08 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Sunset de hostname sem envenenar o Search Console</title><link>https://haruo.dev/blog/sunset-de-hostname-sem-envenenar-o-search-console/</link><guid isPermaLink="true">https://haruo.dev/blog/sunset-de-hostname-sem-envenenar-o-search-console/</guid><description>Um subdomínio órfão servindo 502 poluiu o relatório de indexação do domínio inteiro: com propriedade sc-domain, o erro de um hostname morto vira problema de todos. O runbook que ficou — robots permissivo, 410 na API, 301 no resto — e a ordem certa de desmontar.</description><pubDate>Mon, 07 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Quanto custa automatizar atendimento no WhatsApp? Os componentes de custo de um stack próprio</title><link>https://haruo.dev/blog/quanto-custa-automatizar-atendimento-whatsapp/</link><guid isPermaLink="true">https://haruo.dev/blog/quanto-custa-automatizar-atendimento-whatsapp/</guid><description>A conta real de automatizar atendimento no WhatsApp com stack self-hosted: VPS a partir de ~€6/mês, tarifa da Meta (R$ 0 para responder na janela de 24h; tabela por mensagem para o resto), LLM a centavos por conversa — e a manutenção, o componente que domina a conta e decide quando um SaaS pronto sai mais barato. Todos os preços são públicos, com fonte e data.</description><pubDate>Sat, 05 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Prompt caching: medir o prefixo antes de ligar a flag</title><link>https://haruo.dev/blog/prompt-caching-medir-o-prefixo-primeiro/</link><guid isPermaLink="true">https://haruo.dev/blog/prompt-caching-medir-o-prefixo-primeiro/</guid><description>Como decidir se vale ligar prompt caching: decompor o payload por parte, provar que o prefixo é estável byte a byte (aqui deu 99,8%), pôr o breakpoint no fim do system prompt para cobrir também as definições de ferramentas, e subir o medidor junto com a feature. Com checklist do que fazer na segunda-feira e o que ainda não pode ser afirmado.</description><pubDate>Thu, 03 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Agentes multi-tenant: firewall de capacidade em código, aprovação humana no canal</title><link>https://haruo.dev/blog/agentes-multi-tenant-firewall-de-capacidade/</link><guid isPermaLink="true">https://haruo.dev/blog/agentes-multi-tenant-firewall-de-capacidade/</guid><description>Um serviço de agentes multi-tenant num processo só: schema por tenant, deny-por-padrão no filesystem, ferramentas que saem do registro antes do grafo existir, e aprovação humana onde silêncio nunca é sim. Os padrões, com as duas inversões que quase custaram caro.</description><pubDate>Tue, 01 Sep 2026 12:00:00 GMT</pubDate></item><item><title>Como funciona um MCP server, explicado por quem publicou um</title><link>https://haruo.dev/blog/como-funciona-um-mcp-server/</link><guid isPermaLink="true">https://haruo.dev/blog/como-funciona-um-mcp-server/</guid><description>O que é um MCP server, o ciclo completo de uma chamada (handshake, tools/list, tools/call), a diferença entre tools, resources e prompts, stdio versus HTTP — e o que muda na segurança quando o server toca disco e rede. Explicado com um server real, publicado no npm e no MCP Registry oficial.</description><pubDate>Mon, 31 Aug 2026 12:00:00 GMT</pubDate></item><item><title>Backup com dead-man switch, e o ensaio de restore que precisa saber falhar</title><link>https://haruo.dev/blog/backup-com-dead-man-switch/</link><guid isPermaLink="true">https://haruo.dev/blog/backup-com-dead-man-switch/</guid><description>O desenho em que silêncio vira alarme: o job pinga quando dá certo, e quem vigia nunca depende do vigiado para soar o alerta. A evidência de que isso é necessário: um backup noturno ficou 14 dias morto sem ninguém notar, porque alerta de falha não pega o job que nem roda. Mais o ensaio trimestral de restore que verifica até a própria capacidade de falhar.</description><pubDate>Sat, 29 Aug 2026 12:00:00 GMT</pubDate></item><item><title>Uma VPS, zero portas de serviço abertas: anatomia de um túnel que serve tudo</title><link>https://haruo.dev/blog/vps-unica-cloudflare-tunnel-sem-porta-aberta/</link><guid isPermaLink="true">https://haruo.dev/blog/vps-unica-cloudflare-tunnel-sem-porta-aberta/</guid><description>Todos os serviços numa caixa só, nenhuma porta HTTP exposta: o tráfego entra por Cloudflare Tunnel, admin fica atrás de Access, e o que é interno não tem hostname nenhum. O desenho, as fronteiras de confiança e as armadilhas de compose que custaram incidente.</description><pubDate>Fri, 28 Aug 2026 12:00:00 GMT</pubDate></item><item><title>Um MCP server para a sua API: as decisões de empacotamento que importam</title><link>https://haruo.dev/blog/mcp-server-para-uma-api-decisoes-de-empacotamento/</link><guid isPermaLink="true">https://haruo.dev/blog/mcp-server-para-uma-api-decisoes-de-empacotamento/</guid><description>Caminho de arquivo em vez de base64, diretórios confinados com symlink resolvido, versão do pacote travada na versão do engine por teste, namespace no registry via DNS. As decisões de empacotar uma API como MCP server — e a leitura honesta de registries como canal de distribuição.</description><pubDate>Wed, 26 Aug 2026 12:00:00 GMT</pubDate></item><item><title>IA agentic confiável: os padrões que uso em produção (não o hype)</title><link>https://haruo.dev/blog/agentes-de-ia-confiaveis/</link><guid isPermaLink="true">https://haruo.dev/blog/agentes-de-ia-confiaveis/</guid><description>Subagentes que verificam adversarialmente, número publicado que deriva de teste, aprovação humana no loop com fallback seguro, o agente que não pode se auto-aprovar por silêncio. Os padrões reais de engenharia de agentes confiáveis, com o porquê de cada escolha.</description><pubDate>Mon, 24 Aug 2026 12:00:00 GMT</pubDate></item><item><title>Como um PDF adulterado se revela: forense de estrutura, não de aparência</title><link>https://haruo.dev/blog/pdf-adulterado-como-se-revela/</link><guid isPermaLink="true">https://haruo.dev/blog/pdf-adulterado-como-se-revela/</guid><description>Um PDF editado quase nunca parece editado — mas a edição fica gravada na estrutura do arquivo: revisões incrementais, cadeia /Prev, objetos substituídos, /ByteRange da assinatura. Como raciocinar sobre um PDF pela estrutura, com o mecanismo real que o Tamperlens usa.</description><pubDate>Mon, 24 Aug 2026 12:00:00 GMT</pubDate></item><item><title>Publicar sua taxa de falso positivo: o diferencial que quase ninguém tem</title><link>https://haruo.dev/blog/taxa-de-falso-positivo-medicao-honesta/</link><guid isPermaLink="true">https://haruo.dev/blog/taxa-de-falso-positivo-medicao-honesta/</guid><description>Em detecção de fraude documental, medir recall é a parte fácil. Medir e publicar o falso positivo em populações separadas de documentos legítimos é a disciplina que separa um produto honesto de um teatro de segurança. Com números reais do Tamperlens e o padrão federal que quase ninguém cumpre.</description><pubDate>Mon, 24 Aug 2026 12:00:00 GMT</pubDate></item><item><title>Portões de qualidade que passam sem rodar: quatro modos de falha para caçar no seu CI</title><link>https://haruo.dev/blog/ci-que-mentia/</link><guid isPermaLink="true">https://haruo.dev/blog/ci-que-mentia/</guid><description>Um link check que olha 21 de 74 páginas, um binário que morre no linker, um pipe que engole o exit code, um lint que nunca foi instalado. Quatro maneiras de um portão carimbar ✅ sem fazer o trabalho — e o teste de cinco minutos que expõe cada uma.</description><pubDate>Sun, 23 Aug 2026 12:00:00 GMT</pubDate></item><item><title>Quando o GitHub Actions morre por billing: o runbook do modo de falha silencioso</title><link>https://haruo.dev/blog/github-actions-morre-por-billing/</link><guid isPermaLink="true">https://haruo.dev/blog/github-actions-morre-por-billing/</guid><description>O runbook de quando a cota de minutos hospedados acaba: como o job vermelho de 2 segundos se apresenta, como separar o que parou fazendo barulho do que parou em silêncio, o que restaurar primeiro, e por que quem vigia não pode morar na caixa vigiada.</description><pubDate>Sun, 23 Aug 2026 12:00:00 GMT</pubDate></item><item><title>O teste que deriva o número publicado</title><link>https://haruo.dev/blog/teste-que-deriva-o-numero-publicado/</link><guid isPermaLink="true">https://haruo.dev/blog/teste-que-deriva-o-numero-publicado/</guid><description>O padrão: todo número impresso em superfície pública deriva da fonte de verdade por um teste que quebra em CI, e não por revisão periódica. Como escrever esse teste, onde ele se paga, e o que custa quando ele não existe.</description><pubDate>Sun, 23 Aug 2026 12:00:00 GMT</pubDate></item><item><title>RAG 100% local com Qwen 32B: o desenho, e os 12 achados que travaram o lançamento</title><link>https://haruo.dev/blog/docchat-case-saas-rag-stripe/</link><guid isPermaLink="true">https://haruo.dev/blog/docchat-case-saas-rag-stripe/</guid><description>Como montar um RAG que roda inteiramente local, FastAPI + Qwen 3 Coder 32B via Ollama + ChromaDB, com Stripe Checkout funcionando: o desenho de ponta a ponta, a migração de JSON para SQLite, e a auditoria de segurança cujos 12 achados separam &quot;funciona&quot; de &quot;pode receber um estranho&quot;.</description><pubDate>Tue, 14 Jul 2026 12:00:00 GMT</pubDate></item><item><title>AI Agents em Produção: o que realmente funciona em 2026</title><link>https://haruo.dev/blog/ai-agentes-producao/</link><guid isPermaLink="true">https://haruo.dev/blog/ai-agentes-producao/</guid><description>Guia prático de arquitetura de AI agents em produção com memória persistente, ferramentas, segurança, escalabilidade e custos reais por tarefa.</description><pubDate>Wed, 03 Jun 2026 12:00:00 GMT</pubDate></item><item><title>Astro vs Next.js vs SvelteKit: como escolher sem tabela inventada</title><link>https://haruo.dev/blog/astro-nextjs-sveltekit-2026/</link><guid isPermaLink="true">https://haruo.dev/blog/astro-nextjs-sveltekit-2026/</guid><description>Comparação por filosofia, o que cada framework decide por você, onde cada um brilha, e o roteiro para medir build, bundle e custo no SEU projeto em vez de acreditar no benchmark de um blog.</description><pubDate>Wed, 03 Jun 2026 12:00:00 GMT</pubDate></item><item><title>Automação com IA para pequenas empresas: o que dá pra fazer hoje sem gastar rios de dinheiro</title><link>https://haruo.dev/blog/automacao-ia-pme/</link><guid isPermaLink="true">https://haruo.dev/blog/automacao-ia-pme/</guid><description>Cinco processos que uma PME consegue automatizar com ferramentas de prateleira, o que não vale automatizar, e como levantar o custo do SEU caso em vez de acreditar no meu.</description><pubDate>Wed, 03 Jun 2026 12:00:00 GMT</pubDate></item><item><title>Cloud no Brasil: onde a conta escapa e como achar a sua gordura</title><link>https://haruo.dev/blog/cloud-costs-brasil-eua/</link><guid isPermaLink="true">https://haruo.dev/blog/cloud-costs-brasil-eua/</guid><description>Por que a mesma arquitetura custa mais no Brasil, os quatro lugares por onde a conta de cloud escapa (egress, cobrança por requisição, serviço gerenciado e inferência por token), e o roteiro para medir a sua própria conta em vez de acreditar na média de alguém.</description><pubDate>Wed, 03 Jun 2026 12:00:00 GMT</pubDate></item><item><title>Hostinger vs HostGator vs GoDaddy vs Hetzner: qual VPS/hosting escolher em 2026?</title><link>https://haruo.dev/blog/hostinger-hostgator-godaddy-hetzner-vps/</link><guid isPermaLink="true">https://haruo.dev/blog/hostinger-hostgator-godaddy-hetzner-vps/</guid><description>Comparação completa de VPS no Brasil e exterior: Hostinger, HostGator, GoDaddy e Hetzner. Preços, performance, suporte e recomendações por perfil de projeto.</description><pubDate>Wed, 03 Jun 2026 12:00:00 GMT</pubDate></item><item><title>PostgreSQL para AI Agents: banco relacional ainda é a melhor escolha</title><link>https://haruo.dev/blog/postgresql-para-agents/</link><guid isPermaLink="true">https://haruo.dev/blog/postgresql-para-agents/</guid><description>pgvector, busca por similaridade, memória persistente de agents e dados estruturados em um único banco, sem precisar de Pinecone ou Weaviate.</description><pubDate>Wed, 03 Jun 2026 12:00:00 GMT</pubDate></item><item><title>Segurança em Ferramentas de AI Coding: o alerta que todo dev precisa ouvir</title><link>https://haruo.dev/blog/seguranca-ai-coding-tools/</link><guid isPermaLink="true">https://haruo.dev/blog/seguranca-ai-coding-tools/</guid><description>Ferramenta de AI coding roda com as suas permissões, não com as dela. O que isso significa na prática, quais são os riscos estruturais (segredo, execução, cadeia de suprimentos) e o que dá para fechar sem abrir mão da ferramenta.</description><pubDate>Wed, 03 Jun 2026 12:00:00 GMT</pubDate></item><item><title>O que você está pagando quando contrata uma software house</title><link>https://haruo.dev/blog/software-house-valor-real/</link><guid isPermaLink="true">https://haruo.dev/blog/software-house-valor-real/</guid><description>Uma leitura de fora: o que o preço de uma software house embute, por que a hora sai pelo que sai, quais sinais aparecem já na primeira conversa e como avaliar um orçamento sem ser técnico.</description><pubDate>Wed, 03 Jun 2026 12:00:00 GMT</pubDate></item><item><title>TypeScript 5.x em Produção: padrões e armadilhas que aprendi na prática</title><link>https://haruo.dev/blog/typescript-padroes-producao/</link><guid isPermaLink="true">https://haruo.dev/blog/typescript-padroes-producao/</guid><description>Discriminated unions, template literal types, satisfies, branded types e quando abrir mão de tipos. Aprenda padrões reais de TypeScript 5.x em produção com exemplos práticos.</description><pubDate>Wed, 03 Jun 2026 12:00:00 GMT</pubDate></item><item><title>Vibe Coding na Prática: o que é, quando usar e os riscos reais</title><link>https://haruo.dev/blog/vibe-coding-pratica/</link><guid isPermaLink="true">https://haruo.dev/blog/vibe-coding-pratica/</guid><description>Vibe coding virou buzzword em 2025/2026. Veja casos reais de uso com Cursor, Windsurf e Claude Code, onde funciona e onde acumula dívida técnica.</description><pubDate>Wed, 03 Jun 2026 12:00:00 GMT</pubDate></item><item><title>Como construir AI Agents com Hermes: um guia prático</title><link>https://haruo.dev/blog/construindo-agentes-ia-com-hermes/</link><guid isPermaLink="true">https://haruo.dev/blog/construindo-agentes-ia-com-hermes/</guid><description>Aprenda a construir AI agents com Hermes Agent — framework open-source da Nous Research. Guia prático com exemplos de código, integração de ferramentas e deployment.</description><pubDate>Tue, 26 May 2026 12:00:00 GMT</pubDate></item><item><title>Como avaliar uma software house: os 3 erros que custam caro</title><link>https://haruo.dev/blog/erros-contratar-software-house/</link><guid isPermaLink="true">https://haruo.dev/blog/erros-contratar-software-house/</guid><description>As três perguntas que separam um bom parceiro de tecnologia de um projeto que queima orçamento: escopo escrito com critério de aceite, processo de revisão de código, e decisão registrada em issue. De quem já esteve dos dois lados da mesa.</description><pubDate>Tue, 26 May 2026 12:00:00 GMT</pubDate></item><item><title>Memórias Persistentes para AI Agents com Honcho</title><link>https://haruo.dev/blog/memorias-persistentes-ia-honcho/</link><guid isPermaLink="true">https://haruo.dev/blog/memorias-persistentes-ia-honcho/</guid><description>Aprenda a implementar memória persistente em seus AI agents usando Honcho — uma plataforma open-source para gerenciar memória episódica, semântica e procedural.</description><pubDate>Tue, 26 May 2026 12:00:00 GMT</pubDate></item><item><title>React vs Svelte: Onde cada um brilha</title><link>https://haruo.dev/blog/react-vs-svelte/</link><guid isPermaLink="true">https://haruo.dev/blog/react-vs-svelte/</guid><description>React vs Svelte: comparativo real de performance, curva de aprendizado, ecossistema e produtividade. Qual escolher em 2026 para seu projeto?</description><pubDate>Tue, 26 May 2026 12:00:00 GMT</pubDate></item><item><title>TypeScript além do básico: Padrões que uso em produção</title><link>https://haruo.dev/blog/typescript-alem-do-basico/</link><guid isPermaLink="true">https://haruo.dev/blog/typescript-alem-do-basico/</guid><description>Padrões TypeScript que uso em produção: discriminated unions, type guards, satisfies, template literals e mais. Técnicas avançadas para código mais seguro.</description><pubDate>Tue, 26 May 2026 12:00:00 GMT</pubDate></item></channel></rss>