05 — Escritos
Blog
Sobre desarrollo web, rendimiento, herramientas — y de vez en cuando algo más grande.
7 min de lectura06 oct 2026ActualizadoDesplegar en Vercel desde CI cuando quien commitea no es del equipoMueve un repo a una organización de GitHub y Vercel empieza a bloquear tus despliegues en silencio: el commit «no se pudo asociar a un miembro del equipo». Así despliego desde GitHub Actions con la CLI de Vercel: mis commits siguen contando en mi propio gráfico de GitHub, el panel sigue mostrando quién hizo push, y no pago un asiento por cada colaborador.Vercel · GitHub Actions · CI/CD
8 min de lectura05 sept 2026Cuatro bugs mataban la selección de texto en iOS — y cada uno escondía al siguienteUn editor Lexical dentro de un drawer de vaul funcionaba en todas partes menos en un iPhone real: los tiradores de selección no se arrastraban, el scroll se bloqueaba en los bordes, la barra de herramientas se hundía bajo el teclado. Adivinar no arreglaba nada, porque no había un único culpable — eran cuatro independientes, y cada uno enmascaraba al siguiente. Lo que funcionó fue un banco de bisección: el mismo esqueleto con un interruptor por sospechoso, probado en un dispositivo físico. Esta es la cacería completa — el href que envenena la selección, los drag handlers de vaul, nuestro propio tap-focus, un contenedor que se mueve bajo el dedo — más la autopsia del bloqueo de scroll y las tres escrituras únicas de scrollTop que hicieron que el rubber-band se sintiera nativo, incluida la captura de un swipe en plena rebote.iOS · Safari · WebKit
15 min de lectura29 ago 2026Una cascada de agentes: la terminal elige el que está vivoCuando Claude falló en parte y algunos modelos dejaron de responder, intenté pasarme a Gemini — y descubrí que mi respaldo llevaba meses roto. Así se construye uno que de verdad aguante.Claude Code · AI · CLI
9 min de lectura17 ago 2026system-droid: un guardián que revisa y repara mis sistemas por sí soloMis servicios locales morían en silencio: el informe matinal no llegaba, los tokens caducaban, la copia de seguridad se congelaba. Así que construí un droide sobre launchd que lo revisa todo cada dos horas, repara con un agente Claude lo que es seguro y me escribe solo cuando de verdad hace falta un humano.Claude Code · AI · Automation
10 min de lectura14 ago 2026Una página estática que en secreto es un test A/BUn test A/B suele montarse de forma que la página se cae del CDN a un render por petición. No tiene por qué. Mantén cada variante totalmente estática y deja que un proxy (el middleware renombrado de Next.js) resuelva la asignación con una plataforma de experimentos, según un device id estable — y reescribe solo cuando el visitante no está en el control. La URL nunca cambia, el CDN sigue cacheando y el camino habitual no cuesta nada.Next.js · A/B Testing · Proxy
8 min de lectura10 ago 2026ActualizadoNext.js Memory Leak: Fetch + Modo Standalone — 2 años sin soluciónNext.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.Next.js · Memory Leak · Docker
10 min de lectura09 ago 2026ActualizadoMúltiples cuentas de Claude Code en un dispositivoCómo usar dos (o más) cuentas de Claude Code en paralelo — personal y corporativa — con aislamiento total usando una sola variable de entorno.claude-code · productivity · cli
4 min de lectura05 ago 2026Carga diferida del contenido del blog en SolidStart sin perder el SSGTu blog probablemente entrega el cuerpo de cada artículo en un único bundle — el mío había crecido hasta 2,88 MB, y se descargaba incluso en la página de índice, donde solo necesitas los títulos. Así dividí la prosa de cada artículo en un chunk diferido que carga bajo demanda, manteniendo cada página renderizada por completo en el servidor para el SEO.SolidJS · SolidStart · Performance
8 min de lectura05 ago 2026ActualizadoCRAFT: un método para usar AI sin perder tu ventaja profesionalNombrar un problema sin ofrecer una solución solo siembra 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.ai · learning · career
6 min de lectura28 jul 2026Un listener en lugar de un componente cliente por botónEn 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.JavaScript · Analytics · Event Delegation
10 min de lectura28 jul 2026Un acordeón fluido con cero JavaScriptTodo 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.CSS · HTML · Accordion
9 min de lectura27 jul 2026Captura un valor de terceros en el instante en que llega a windowUn 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.JavaScript · Web · Third-Party Scripts
9 min de lectura24 jul 2026Ajusta el texto a su contenedor con CSS puro — sin JavaScriptTodo 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.CSS · Container Queries · Typography
11 min de lectura18 jul 2026next/dynamic no te salvará: por qué las páginas de Next.js gestionadas por CMS envían todos los chunksNuestras 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%.Next.js · Performance · Code Splitting
14 min de lectura30 jun 2026Saco mis tableros de Miro y los llevo a ObsidianEl 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.obsidian · miro · automation
6 min de lectura23 jun 2026ActualizadoClaude Code Multi-Profile, v2: una arquitectura XDG limpiaDespué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.claude-code · productivity · cli
9 min de lectura22 jun 2026El 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.ai · learning · career
8 min de lectura29 may 2026Cómo escribir agentes de Claude Code que no te mientanDos 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.claude-code · agents · ai
6 min de lectura03 may 2026Cómo conectar Claude Desktop a Obsidian — Un viaje a través de 4 servidores MCPUna 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.Obsidian · Claude · MCP
9 min de lectura17 abr 2026Agujeros 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.physics · philosophy · consciousness
10 min de lectura17 abr 2026La IA mató al CMS — al menos para sitios simplesPor qué los sistemas de gestión de contenido tradicionales se están volviendo innecesarios para portfolios, blogs y landing pages.ai · cms · web-development
8 min de lectura12 abr 2026Cómo conectar Perplexity AI a Obsidian vía MCP — Notas directas desde el chatConfigura 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.Obsidian · Perplexity · MCP
5 min de lectura12 abr 2026Digest Diario de Noticias AI con Claude Code CLI y Obsidian — Cero DependenciasCó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.Claude Code · AI · Obsidian
7 min de lectura11 abr 2026Next.js Dark Mode sin parpadeo ni advertencias de React 19Cómo reemplazar next-themes con Zustand + useServerInsertedHTML para modo oscuro sin parpadeo en Next.js 15+.next.js · react-19 · dark-mode
8 min de lectura08 abr 2026Cómo eliminé 94 archivos CSS que bloquean el renderizado en Next.js 16 con una característica poco documentada de TurbopackDespué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.Next.js · CSS · Performance
12 min de lectura
27 entradas