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.

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

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…

10 min
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.
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
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

Se você já precisou adicionar um simples campo em um formulário e teve que navegar por cinco pastas na raiz do projeto (/components, /services, /types, /hooks, /utils), você foi ví…

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