Pular para o conteúdo
< samuelsantana.dev />

Engenharia de Software,
Arquitetura & Código.

samuelsantana.dev é um blog pessoal sobre engenharia de software, arquitetura e código — anotações de quem constrói produtos reais no dia a dia.

AngularPerformanceTypeScript
Ler Performance com RxJS, medida: o gargalo quase nunca é o operador

Performance com RxJS, medida: o gargalo quase nunca é o operador

Uma pergunta que aparece sob "RxJS performance" é se o RxJS é lento. Eu medi. Na minha máquina, cada operador de uma cadeia custa entre 8 e 12 nanossegundos por valor. Não é de gra…

13 min
Diagrama de marbles do typeahead: sete teclas de 'a' a 'angular', seis requisições canceladas pelo switchMap e só a resposta 'angular@520ms' chegando à tela.
As cinco etapas do login OAuth numa linha de diagnóstico, cada uma com seu erro típico; o fluxo para na etapa 3, OAUTH_STATE_MISMATCH, marcada com um carimbo vermelho "AQUI".
Ler Erro ao inicializar o OAuth: como descobrir em que etapa o login quebrou
15 min

Erro ao inicializar o OAuth: como descobrir em que etapa o login quebrou

"Erro ao inicializar o OAuth", "Não foi possível entrar", "Login failed". A mensagem que chega ao usuário quase nunca diz onde o fluxo parou, e um login OAuth tem pelo menos cinco…

OAuthSecurity+1
Dois relógios: 21:00 no navegador em Brasília e 00:00 no servidor em UTC, com o diff de datas do erro React #418 entre eles.
Ler React #418 só depois das 21h: o servidor já estava amanhã
10 min

React #418 só depois das 21h: o servidor já estava amanhã

De dia, nada. A partir das 21h, todo carregamento do Painel e da página de demonstração do BolsoVerde, o app de controle de vendas que eu construo para pequenos vendedores (bolsove…

ReactNext.js+1
Árvore src/app do Angular 22 com cada feature ligada ao seu chunk lazy do ng build (product-list 796 bytes, cart 498 bytes) e o import de checkout para catalog barrado pelo lint de fronteiras.
Ler Estrutura de pastas em Angular 22: features lazy e fronteiras que o lint garante
13 min

Estrutura de pastas em Angular 22: features lazy e fronteiras que o lint garante

Em julho eu escrevi um panorama de arquitetura de pastas para React, Angular e Node.js. A parte de Angular envelheceu mal. Ela recomendava checkout.component.ts e auth.guard.ts, pa…

AngularSoftware Architecture+1
Diagrama: duas tentativas de charge_customer cobram a mesma fatura duas vezes; com deduplicação por chave de idempotência, a segunda tentativa é descartada e a fatura é cobrada uma vez.
Ler Idempotência em Tool Calls: o Bug Que Ninguém Vê Até o Agente de IA Duplicar uma Cobrança
7 min

Idempotência em Tool Calls: o Bug Que Ninguém Vê Até o Agente de IA Duplicar uma Cobrança

Um agente de IA chama a ferramenta charge_customer. A chamada HTTP demora mais que o esperado, o timeout dispara, e o próprio modelo (não um script, o modelo) decide tentar de novo…

IANodeJS
Lista Memory files do /context: dois arquivos CLAUDE.md carregados dentro da janela de contexto e o AGENTS.md riscado, do lado de fora, não carregado.
Ler Engenharia de contexto na prática: o que o agente não carrega não existe
14 min

Engenharia de contexto na prática: o que o agente não carrega não existe

Em 19 de agosto eu descobri que as regras escritas para todos os meus repositórios nunca tinham valido em sessão nenhuma. Elas estavam num AGENTS.md na pasta que reúne os projetos,…

IASoftware Architecture
Diagrama: instâncias Lambda com max 5 conexões convergem para o pooler, que abre poucas conexões reais com o Postgres.
Ler Connection Pooling em Postgres Serverless: Por Que Sua API Trava em Produção
7 min

Connection Pooling em Postgres Serverless: Por Que Sua API Trava em Produção

Funciona perfeitamente no seu localhost. Passa no CI. Funciona em staging com dois usuários de teste. Aí você sobe para produção, o tráfego cresce um pouco e a API começa a devolve…

PostgreSQLNodeJS+1
Diagrama: withLoading → catchToState → bindTo; checando .set antes do typeof, setLoading(value) do React e loading.set(value) do Angular gravam o valor
Ler RxJS Já Sabe Fazer loading/error/data: os Operators Por Trás do rx-state-bridge
5 min

RxJS Já Sabe Fazer loading/error/data: os Operators Por Trás do rx-state-bridge

Toda tela que busca dado tem o mesmo esqueleto: um loading que vira true antes do request e false depois, um error que captura o que deu errado, um data que recebe o resultado. Trê…

TypeScriptAngular+2
Diagrama: typeof === 'function' é true para o setLoading do React e para o signal() do Angular; no signal, a chamada lê o valor em vez de gravar
Ler signal() Também É Função: o Bug Que Deixava Todo Operator do rx-state-bridge Mudo com Angular
6 min

signal() Também É Função: o Bug Que Deixava Todo Operator do rx-state-bridge Mudo com Angular

rx-state-bridge é uma lib que escrevi pra resolver um problema chato e repetitivo: todo fetch numa UI acaba com o mesmo trio de loading/error/data reescrito à mão, subscription atr…

AngularReact+2
Capa: URL de callback com ?token= ramificando para logs de acesso, histórico, header Referer e SDK de analytics; ao lado, o padrão seguro: ?code=, POST /auth/exchange e cookie httpOnly.
Ler O Erro Silencioso do OAuth: Por Que o Token Nunca Deveria Passar pela URL
5 min

O Erro Silencioso do OAuth: Por Que o Token Nunca Deveria Passar pela URL

O login OAuth funciona. O popup abre, o usuário aprova no Google, o popup fecha, e a sua aplicação recebe ?token=eyJhbGciOi... na URL de callback. Você lê o token da query string,…

OAuthSecurity+1
Diagrama: uma árvore src/ organizada por tipo de arquivo (components/, services/, types/, hooks/, utils/) é refatorada em pastas por feature — checkout/, billing/ e catalog/.
Ler Arquitetura de Pastas em Escala: Como organizar projetos React, Angular e Node.js com SOLID e Clean Architecture
7 min

Arquitetura de Pastas em Escala: Como organizar projetos React, Angular e Node.js com SOLID e Clean Architecture

Atualização: procurando só Angular? A estrutura de pastas em Angular 22 foi testada no CLI atual, com os nomes de arquivo de hoje (sem .component.ts), rotas lazy por feature e fron…

AngularReact+1
Ilustração de um robô de IA operando um painel Angular no navegador: ativa o tema escuro, ajusta o filtro de preço máximo e dispara um aviso para leitor de tela.
Ler O Frontend Guiado por IA: WebMCP, Tools e Acessibilidade no Angular
6 min

O Frontend Guiado por IA: WebMCP, Tools e Acessibilidade no Angular

Durante anos, o papel do frontend foi muito claro: buscar dados em uma API (REST ou GraphQL), gerenciar o estado local e renderizar HTML. Nós construímos aplicações "burras" que de…

AngularIA
JWT, com cadeado e token, versus Server-Side Sessions, com banco Redis e chave; logos de Next.js e NestJS nos dois lados.
Ler Autenticação e Segurança: JWT vs. Server-Side Sessions no ecossistema Next.js + NestJS
6 min

Autenticação e Segurança: JWT vs. Server-Side Sessions no ecossistema Next.js + NestJS

Se existe um tema na engenharia de software capaz de gerar mais discussões do que a escolha entre espaços e tabs, é a autenticação. Durante anos, a comunidade frontend adotou um pa…

NestJSNext.js+1
Logotipo do RxJS emaranhado em fios, à esquerda, contra o escudo do Angular emitindo feixes rotulados Signals e computed, à direita
Ler RxJS vs. Signals: O impacto na performance e na arquitetura de aplicações Angular
6 min

RxJS vs. Signals: O impacto na performance e na arquitetura de aplicações Angular

Quem constrói aplicações Angular há mais de alguns anos provavelmente desenvolveu uma espécie de Síndrome de Estocolmo com o RxJS. Nós o amamos pela sua robustez em lidar com fluxo…

Angular
Ilustração isométrica: o distrito legado GA2 em ruínas, com alerta de race condition, ligado por um "Tenant Context Gatekeeper" ao distrito moderno GA3, que um braço robótico "Migration Orchestrator" vai montando.
Ler Estratégias Reais para Migração de Frontends Complexos
7 min

Estratégias Reais para Migração de Frontends Complexos

O Fim do "Big Bang" Todo dev sênior já esteve nessa reunião. O legado acumulou uma dívida técnica impagável, o tempo de build leva minutos dolorosos, cada nova feature quebra duas…

Software ArchitectureMicro-frontends
Ilustração: tokens entrando numa janela de contexto, engrenagens de skills (tool use, análise de dados, raciocínio, geração de código) e, no topo, um agente autônomo.
Ler Arquitetura de LLMs: Tokens, Contexto, Skills e Agentes
5 min

Arquitetura de LLMs: Tokens, Contexto, Skills e Agentes

A integração de IA generativa deixou de ser apenas sobre interfaces de chat e se tornou um desafio direto de arquitetura de software. Entender o funcionamento do motor dessas ferra…

IA
Capa: à esquerda, vertex-web e vertex-api com o cookie preso no domínio da API; à direita, a API devolve um code, o vertex-web chama POST /auth/exchange e fica com o cookie.
Ler Por que meu login OAuth funcionava em dev e travava em produção
6 min

Por que meu login OAuth funcionava em dev e travava em produção

Durante semanas o login com Google e GitHub do samuelsantana.dev funcionou perfeitamente — no meu ambiente local. Em produção, o popup abria, o usuário autorizava, e depois disso n…

Next.jsNestJS+4
Diagrama: Zone.js verifica cinco componentes (header, cart, sidebar, footer, modal); com signal(), só o cart é atualizado
Ler O Renascimento do Angular: Signals e a Nova Abordagem HTTP
4 min

O Renascimento do Angular: Signals e a Nova Abordagem HTTP

Se você acompanha o ecossistema Angular de perto, sabe que o framework está passando pelo seu maior renascimento desde a reescrita do AngularJS para o Angular 2. Com a chegada das…

AngularPerformance
Diagrama: um bundle monolítico (app.bundle.js) com checkout, cart, billing, profile e admin é federado em um shell com três micro-frontends — checkout, billing e profile —, cada um com deploy próprio.
Ler O Frontend Virou o Novo Monolito? Como a Arquitetura Impacta a Escala do Negócio
3 min

O Frontend Virou o Novo Monolito? Como a Arquitetura Impacta a Escala do Negócio

Durante muito tempo, o termo "monolito legado" foi um pesadelo exclusivo dos times de backend. Porém, com o aumento da complexidade das aplicações web modernas, a lógica de negócio…

Software ArchitectureMicro-frontends