Ingeniería de Software,
Arquitectura & Código.
samuelsantana.dev es un blog personal sobre ingeniería de software, arquitectura y código — notas de alguien que construye productos reales día a día.
Rendimiento con RxJS, medido: el cuello de botella casi nunca es el operador
Una pregunta que aparece bajo "RxJS performance" es si RxJS es lento. Lo medí. En mi máquina, cada operador de una cadena cuesta entre 8 y 12 nanosegundos por valor. No es gratis,…


Error al inicializar OAuth: cómo descubrir en qué etapa se rompió el login
"Error al inicializar OAuth", "No se pudo iniciar sesión", "Login failed". El mensaje que le llega al usuario casi nunca dice dónde se detuvo el flujo, y un login OAuth tiene al me…

React #418 solo después de las 21 h: en el servidor ya era mañana
De día, nada. A partir de las 21 h, cada carga del panel y de la página de demostración de BolsoVerde, la app de control de ventas que construyo para pequeños vendedores en Brasil…

Estructura de carpetas en Angular 22: features lazy y fronteras que el lint garantiza
En julio escribí un panorama de arquitectura de carpetas para React, Angular y Node.js. La parte de Angular envejeció mal. Recomendaba checkout.component.ts y auth.guard.ts, carpet…

Idempotencia en Tool Calls: el Bug Que Nadie Ve Hasta Que el Agente de IA Duplica un Cobro
Un agente de IA llama a la herramienta charge_customer. La llamada HTTP tarda más de lo esperado, salta el timeout, y el propio modelo (no un script, el modelo) decide intentarlo d…

Ingeniería de contexto en la práctica: lo que el agente no carga no existe
El 19 de agosto descubrí que las reglas que había escrito para todos mis repositorios nunca habían valido en ninguna sesión. Estaban en un AGENTS.md en la carpeta que reúne mis pro…

Connection Pooling en Postgres Serverless: Por Qué Tu API se Cae en Producción
Funciona perfectamente en tu localhost. Pasa el CI. Funciona en staging con dos usuarios de prueba. Después subes a producción, el tráfico crece un poco y la API empieza a devolver…

RxJS Ya Sabe Hacer loading/error/data: los Operators Detrás de rx-state-bridge
Toda pantalla que busca datos tiene el mismo esqueleto: un loading que pasa a true antes del request y a false después, un error que captura lo que salió mal, un data que recibe el…

signal() También Es una Función: el Bug Que Dejaba Mudo Todo Operator de rx-state-bridge con Angular
rx-state-bridge es una librería que escribí para resolver un problema tedioso y repetitivo: cada fetch en una UI termina con el mismo trío de loading/error/data reescrito a mano, s…

El Error Silencioso del OAuth: Por Qué el Token Nunca Debería Pasar por la URL
El login OAuth funciona. El popup se abre, el usuario aprueba en Google, el popup se cierra, y tu aplicación recibe ?token=eyJhbGciOi... en la URL de callback. Lees el token de la…

Arquitectura de Carpetas a Escala: Cómo organizar proyectos React, Angular y Node.js con SOLID y Clean Architecture
Actualización: ¿buscas solo Angular? La estructura de carpetas en Angular 22 se probó con el CLI actual, con los nombres de archivo de hoy (sin .component.ts), rutas lazy por featu…

El Frontend Guiado por IA: WebMCP, Tools y Accesibilidad en Angular
Durante años, el papel del frontend estuvo muy claro: consumir datos de una API (REST o GraphQL), gestionar el estado local y renderizar HTML. Construíamos aplicaciones "tontas" qu…

Autenticación y Seguridad: JWT vs. Server-Side Sessions en el ecosistema Next.js + NestJS
Si hay un tema en la ingeniería de software capaz de generar más discusiones que la elección entre espacios y tabs, es la autenticación. Durante años, la comunidad frontend adoptó…

RxJS vs. Signals: El impacto en el rendimiento y la arquitectura de aplicaciones Angular
Cualquiera que lleve construyendo aplicaciones Angular por más de un par de años probablemente haya desarrollado una especie de Síndrome de Estocolmo con RxJS. Lo amamos por su rob…

Estrategias Reales para la Migración de Frontends Complejos
El Fin del "Big Bang" Todo dev senior ha estado en esta reunión. El legado ha acumulado una deuda técnica impagable, el tiempo de build toma minutos dolorosos, cada nueva feature r…

Arquitectura de LLMs: Tokens, Contexto, Skills y Agentes
La integración de IA generativa ha dejado de ser solo sobre interfaces de chat y se ha convertido en un desafío directo de arquitectura de software. Entender el funcionamiento del…

Por qué mi login OAuth funcionaba en dev y fallaba en producción
Durante semanas el inicio de sesión con Google y GitHub de samuelsantana.dev funcionó perfectamente — en mi entorno local. En producción, el popup se abría, el usuario autorizaba,…

El Renacimiento de Angular: Signals y el Nuevo Enfoque HTTP
Si sigues de cerca el ecosistema de Angular, sabes que el framework está viviendo su mayor renacimiento desde la reescritura de AngularJS a Angular 2. Con la llegada de las version…

¿El Frontend Se Convirtió en el Nuevo Monolito? Cómo la Arquitectura Impacta la Escala del Negocio
Durante mucho tiempo, el término "monolito legado" fue una pesadilla exclusiva de los equipos de backend. Pero con el aumento de la complejidad de las aplicaciones web modernas, la…