Skip to main content

Blog

Sobre desarrollo web, rendimiento, herramientas — y de vez en cuando algo más grande.

JavaScriptAnalyticsEvent DelegationServer ComponentsPerformance

Un listener en lugar de un componente cliente por botón

En cuanto añades analítica de clics a un componente, este se convierte en un componente cliente que envía JavaScript. Haz eso a lo largo de todo un sitio y solo el tracking infla tu bundle. Aquí está la alternativa que ha estado en la plataforma desde siempre: un único listener delegado, atributos de datos declarativos y componentes que siguen siendo HTML puro renderizado en el servidor.

28 de julio de 202610 min de lectura
Leer artículo
CSSHTMLAccordionFrontendPerformance

Un acordeón fluido con cero JavaScript

Todo el mundo recurre al estado de React y a un hook que mide la altura para construir un acordeón. El navegador incluye uno nativo desde hace años — y desde 2024 anima la apertura y el cierre con CSS puro. Aquí tienes la técnica completa: details[name], ::details-content, interpolate-size y la única propiedad que también anima el cierre.

28 de julio de 20269 min de lectura
Leer artículo
JavaScriptWebThird-Party ScriptsFrontendPatterns

Captura un valor de terceros en el instante en que llega a window

Un script que no controlas escribe su resultado en un global de window en un momento que no puedes predecir. La mayoría del código compite contra él con un timeout o desperdicia el main thread haciendo polling. Aquí está el truco de accessor property que convierte la escritura en un evento — además del getter que no debes olvidar, y cómo sustituir el valor por completo.

27 de julio de 20269 min de lectura
Leer artículo
CSSContainer QueriesTypographyFrontendPerformance

Ajusta el texto a su contenedor con CSS puro — sin JavaScript

Todo el mundo escribe un hook de JavaScript para reducir el font-size hasta que el texto quepa en un contenedor. Aquí tienes una alternativa totalmente funcional y sin JS usando unidades de container query, clamp() y separación silábica según el idioma — incluida la trampa de la cascada que hace que la gente se rinda.

24 de julio de 202611 min de lectura
Leer artículo
Next.jsPerformanceCode SplittingTurbopackReact Server Components

next/dynamic no te salvará: por qué las páginas de Next.js gestionadas por CMS envían todos los chunks

Nuestras páginas de Next.js gestionadas por CMS enviaban los ~100 componentes de sección en cada ruta, pese a un uso de next/dynamic de manual. Agotamos todos los arreglos a nivel de bundler (import() directo, división de archivos, configuración de Turbopack, splitChunks de webpack) antes de encontrar la causa real: la alcanzabilidad, no el chunking. La generación de código en tiempo de build más rewrites recortó el JS de primera carga en un 53%.

18 de julio de 202614 min de lectura
Leer artículo
obsidianmiroautomationtoolsopen-source

Saco mis tableros de Miro y los llevo a Obsidian

El botón Export de Miro te da un PNG o un PDF — una foto de los datos, no los datos. Si tus tableros son load-bearing maps of thinking acumulados durante años, su sitio es Obsidian: editables, searchable, en un vault local. Cómo saqué los boards de Miro vía REST API y los convertí a Excalidraw / Obsidian Canvas — conservando posiciones, colores, fuentes, curved connectors, mindmap nodes — y la lección va más allá de Miro: a todo SaaS hay que mirarlo con un exit plan ANTES del primer uso.

30 de junio de 20266 min de lectura
Leer artículo
ailearningcareermethodology

CRAFT: un método para usar AI sin perder tu ventaja profesional

Un diagnóstico sin remedio no es más que ansiedad. Tras el artículo sobre la descualificación por AI, aquí está la prescripción: CRAFT — cinco principios (Challenge First, Review Adversarially, Ask Why Not What, Friction on Purpose, Test Your Understanding) bajo un solo axioma: AI hace lo que ya dominas; tú haces lo que todavía estás aprendiendo. Un método práctico y fácil de recordar para usar AI cada día sin perder habilidades sin darte cuenta.

23 de junio de 20266 min de lectura
Leer artículo
ailearningcareerengineering

El silencio que apagó la AI

¿Vale la pena seguir aprendiendo a programar si existe la AI? La respuesta ruidosa es errónea por ambos lados. Con la base de evidencia de 2025–2026 (Nature, Anthropic, AI & Society) la pregunta no es "AI o no", sino qué habilidades cederle a la AI y cuáles guardar para ti — y hay una cosa que sí cambió: antes la realidad te obligaba a aprender por fricción, la AI apagó ese empujón en silencio.

22 de junio de 20268 min de lectura
Leer artículo
claude-codeproductivityclidevtools

Claude Code Multi-Profile, v2: una arquitectura XDG limpia

Después de un mes con el enfoque viejo basado en alias, rehíce mi setup multi-profile de Claude Code a una estructura compatible con XDG bajo ~/.config/claude-profiles/. La razón real no fue el orden — fue descubrir que ~/.claude.json es un archivo separado en el home root donde vivían silenciosamente los servidores MCP añadidos con --scope user.

13 de junio de 20269 min de lectura
Leer artículo
claude-codeagentsaiprompt-engineeringautomation

Cómo escribir agentes de Claude Code que no te mientan

Dos reglas para construir pipelines de agentes de Claude Code fiables: un agente por especialización, y comandos de shell en lugar de prompts en todo lo que requiera respuestas cuantitativas.

29 de mayo de 20266 min de lectura
Leer artículo
claude-codeproductivityclidevtools

Múltiples cuentas de Claude Code en un dispositivo

Cómo usar dos (o más) cuentas de Claude Code en paralelo — personal y corporativa — con aislamiento total usando una sola variable de entorno.

5 de mayo de 20264 min de lectura
Leer artículo
ObsidianClaudeMCPAutomationAI

Cómo conectar Claude Desktop a Obsidian — Un viaje a través de 4 servidores MCP

Una historia real sobre la búsqueda de una forma estable de automatizar el refactoring del vault de Obsidian vía Claude. Qué se rompió, qué funcionó, y por qué VaultForge resultó ser la única opción funcional.

3 de mayo de 20269 min de lectura
Leer artículo
physicsphilosophyconsciousnessblack-holescosmology

Agujeros negros como universos recursivos: de la física al propósito de la existencia

¿Y si cada agujero negro es un Big Bang de un nuevo universo? Una exploración de la cosmología recursiva y el cierre cognitivo.

17 de abril de 202610 min de lectura
Leer artículo
aicmsweb-developmentopinionworkflow

La IA mató al CMS — al menos para sitios simples

Por qué los sistemas de gestión de contenido tradicionales se están volviendo innecesarios para portfolios, blogs y landing pages.

17 de abril de 20268 min de lectura
Leer artículo
ObsidianPerplexityMCPAIProductivity

Cómo conectar Perplexity AI a Obsidian vía MCP — Notas directas desde el chat

Configura Perplexity Desktop para leer y escribir tu Obsidian vault usando el servidor MCP filesystem. Investiga en la web y guarda en tus notas en una conversación.

12 de abril de 20265 min de lectura
Leer artículo
Claude CodeAIObsidianAutomationProductivity

Digest Diario de Noticias AI con Claude Code CLI y Obsidian — Cero Dependencias

Cómo construí un agente diario de investigación de noticias con un script bash de 6 líneas, modo headless de Claude Code y macOS launchd.

12 de abril de 20267 min de lectura
Leer artículo
next.jsreact-19dark-modezustandperformance

Next.js Dark Mode sin parpadeo ni advertencias de React 19

Cómo reemplazar next-themes con Zustand + useServerInsertedHTML para modo oscuro sin parpadeo en Next.js 15+.

11 de abril de 20268 min de lectura
Leer artículo
Next.jsCSSPerformanceTurbopackSCSS

Cómo eliminé 94 archivos CSS que bloquean el renderizado en Next.js 16 con una característica poco documentada de Turbopack

Después de días probando cada enfoque — desde experimental.inlineCss hasta hacks con MutationObserver — descubrí Turbopack Import Attributes que resuelven el problema de CSS que bloquea el renderizado en Next.js App Router.

8 de abril de 202612 min de lectura
Leer artículo
Next.jsMemory LeakDockerAWS LambdaNode.js

Next.js Memory Leak: Fetch + Modo Standalone — 2 años sin solución

Next.js parchea el fetch global y añade una capa de caché que pierde memoria en cada petición. En Docker/K8s esto causa crashes OOM cada pocas horas. El bug existe desde Next.js 14 y sigue sin resolverse en 16.2.x.

19 de marzo de 202610 min de lectura
Leer artículo