[{"data":1,"prerenderedAt":160},["ShallowReactive",2],{"blog-translations":3,"projects-es":14},{"\u002Fblog\u002Fcomo-hacer-migraciones-con-claude-code-y-no-morir-en-el-intento\u002F":4,"\u002Fen\u002Fblog\u002Fhow-to-migrate-with-claude-code-and-not-die-trying\u002F":5,"\u002Fblog\u002Fcontext-architecture-el-repo-entero-es-contexto\u002F":6,"\u002Fen\u002Fblog\u002Fcontext-architecture-the-whole-repo-is-the-context\u002F":7,"\u002Fblog\u002Flo-que-aprendi-construyendo-design-systems-y-que-haria-diferente\u002F":8,"\u002Fen\u002Fblog\u002Fwhat-i-learned-building-design-systems-and-what-i-would-do-differently\u002F":9,"\u002Fblog\u002Foxlint-tailwindcss-el-plugin-de-linting-que-tailwindcss-necesitaba\u002F":10,"\u002Fen\u002Fblog\u002Foxlint-tailwindcss-the-linting-plugin-tailwind-v4-needed\u002F":11,"\u002Fblog\u002Fscreaming-architecture-la-clave-para-un-frontend-escalable\u002F":12,"\u002Fen\u002Fblog\u002Fscreaming-architecture-the-key-to-scalable-frontend\u002F":13},"\u002Fen\u002Fblog\u002Fhow-to-migrate-with-claude-code-and-not-die-trying\u002F","\u002Fblog\u002Fcomo-hacer-migraciones-con-claude-code-y-no-morir-en-el-intento\u002F","\u002Fen\u002Fblog\u002Fcontext-architecture-the-whole-repo-is-the-context\u002F","\u002Fblog\u002Fcontext-architecture-el-repo-entero-es-contexto\u002F","\u002Fen\u002Fblog\u002Fwhat-i-learned-building-design-systems-and-what-i-would-do-differently\u002F","\u002Fblog\u002Flo-que-aprendi-construyendo-design-systems-y-que-haria-diferente\u002F","\u002Fen\u002Fblog\u002Foxlint-tailwindcss-the-linting-plugin-tailwind-v4-needed\u002F","\u002Fblog\u002Foxlint-tailwindcss-el-plugin-de-linting-que-tailwindcss-necesitaba\u002F","\u002Fen\u002Fblog\u002Fscreaming-architecture-the-key-to-scalable-frontend\u002F","\u002Fblog\u002Fscreaming-architecture-la-clave-para-un-frontend-escalable\u002F",[15,55,86,112,134],{"id":16,"title":17,"body":18,"date":35,"description":36,"extension":37,"kind":38,"links":39,"meta":43,"navigation":44,"order":45,"outcome":46,"path":47,"quote":48,"seo":49,"stem":50,"union":51,"url":52,"urlLabel":53,"__hash__":54},"projects_es\u002Fprojects\u002Fes\u002Fh3-percent-encoding.md","h3: preservar req.url percent-encoded para HTTP proxies",{"type":19,"value":20,"toc":30},"minimark",[21],[22,23,24,25,29],"p",{},"Después de un fix de seguridad, h3 (el router HTTP de Nitro y Nuxt) decodificaba ",[26,27,28],"code",{},"req.url"," y rompía cualquier proxy que esperara la URL en formato percent-encoded. Las OG images de nuxt-og-image con caracteres acentuados devolvían 400 en el dev server. Reporté el issue, propuse el fix y abrí el PR, mergeado en h3 v1.x.",{"title":31,"searchDepth":32,"depth":33,"links":34},"",2,3,[],"2026-03-22","Las OG images con caracteres acentuados devolvían 400 en el dev server de Nuxt. Reporté, propuse el fix y abrí el PR.","md","contribution",[40],{"label":41,"url":42},"Ver issue","https:\u002F\u002Fgithub.com\u002Fh3js\u002Fh3\u002Fissues\u002F1354",{},true,"1","PR mergeado","\u002Fprojects\u002Fes\u002Fh3-percent-encoding",null,{"title":17,"description":36},"projects\u002Fes\u002Fh3-percent-encoding","h3-percent-encoding","https:\u002F\u002Fgithub.com\u002Fh3js\u002Fh3\u002Fpull\u002F1355","Ver PR","t8V9lu4ffs9d0KLCcGjNVdzXM_dp3_hEHGSCyn0oQOs",{"id":56,"title":57,"body":58,"date":48,"description":65,"extension":37,"kind":66,"links":67,"meta":74,"navigation":44,"order":45,"outcome":48,"path":75,"quote":76,"seo":81,"stem":82,"union":57,"url":83,"urlLabel":84,"__hash__":85},"projects_es\u002Fprojects\u002Fes\u002Foxlint-tailwindcss.md","oxlint-tailwindcss",{"type":19,"value":59,"toc":63},[60],[22,61,62],{},"Plugin nativo de oxlint para Tailwind CSS v4. Autofix y zero-config, diseñado desde cero para Tailwind v4 y usado en producción en monorepos de millones de líneas.",{"title":31,"searchDepth":32,"depth":33,"links":64},[],"Plugin nativo de oxlint para Tailwind CSS v4, con autofix.","project",[68,71],{"label":69,"url":70},"npm","https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Foxlint-tailwindcss",{"label":72,"url":73},"Leer cómo lo construí","https:\u002F\u002Fsergioazocar.com\u002Fblog\u002Foxlint-tailwindcss-el-plugin-de-linting-que-tailwindcss-necesitaba\u002F",{},"\u002Fprojects\u002Fes\u002Foxlint-tailwindcss",{"text":77,"author":78,"role":79,"url":80},"We use it internally in a 3M lines monorepo, and a full type-aware check is still ~1.2s. Amazing work from @sergioazoc.","Felipe Torres","CTO & Co-Founder, Skyward","https:\u002F\u002Fx.com\u002Ffforres\u002Fstatus\u002F2044481779306823819",{"title":57,"description":65},"projects\u002Fes\u002Foxlint-tailwindcss","https:\u002F\u002Fgithub.com\u002Fsergioazoc\u002Foxlint-tailwindcss","GitHub","zYu6FA8ttML_LkMdAFN7jbTDl1TgWK3GSc-2RHbEdm8",{"id":87,"title":88,"body":89,"date":100,"description":101,"extension":37,"kind":38,"links":102,"meta":103,"navigation":44,"order":104,"outcome":105,"path":106,"quote":48,"seo":107,"stem":108,"union":109,"url":110,"urlLabel":41,"__hash__":111},"projects_es\u002Fprojects\u002Fes\u002Fastro-prerender-errors.md","@astrojs\u002Fcloudflare: mostrar los errores del prerender server",{"type":19,"value":90,"toc":98},[91],[22,92,93,94,97],{},"El prerenderer del adaptador de Cloudflare descartaba el body de las respuestas 500 de workerd y devolvía un error opaco que escondía la causa real (por ejemplo, ",[26,95,96],{},"GetStaticPathsRequired","). Reporté el issue con un patch y el equipo de Astro lo aplicó dos días después.",{"title":31,"searchDepth":32,"depth":33,"links":99},[],"2026-03-11","El prerenderer descartaba el body de las respuestas 500 y escondía la causa real. El equipo de Astro aplicó mi patch.",[],{},"2","Issue con patch","\u002Fprojects\u002Fes\u002Fastro-prerender-errors",{"title":88,"description":101},"projects\u002Fes\u002Fastro-prerender-errors","astro-prerender-errors","https:\u002F\u002Fgithub.com\u002Fwithastro\u002Fastro\u002Fissues\u002F15860","9LwZKNnYf3eX9MVYu7rnHK3mHhD_RcfLn-0Nd5gCZuc",{"id":113,"title":114,"body":115,"date":48,"description":122,"extension":37,"kind":66,"links":123,"meta":126,"navigation":44,"order":104,"outcome":48,"path":127,"quote":48,"seo":128,"stem":129,"union":130,"url":131,"urlLabel":132,"__hash__":133},"projects_es\u002Fprojects\u002Fes\u002Fhollware.md","Hollware",{"type":19,"value":116,"toc":120},[117],[22,118,119],{},"CMS open source para agentes, nativo de Cloudflare. El contenido de este sitio (posts, charlas, proyectos y links) vive ahí.",{"title":31,"searchDepth":32,"depth":33,"links":121},[],"CMS para agentes, nativo de Cloudflare. Este sitio se gestiona con él.",[124],{"label":84,"url":125},"https:\u002F\u002Fgithub.com\u002Fhollware\u002Fhollware",{},"\u002Fprojects\u002Fes\u002Fhollware",{"title":114,"description":122},"projects\u002Fes\u002Fhollware","hollware","https:\u002F\u002Fhollware.com","hollware.com","MuOG8uWEMo5sg3kv78mjpR2J0KwWGPvB-Cp-Lz4fYsI",{"id":135,"title":136,"body":137,"date":48,"description":144,"extension":37,"kind":66,"links":145,"meta":151,"navigation":44,"order":152,"outcome":48,"path":153,"quote":48,"seo":154,"stem":155,"union":156,"url":157,"urlLabel":158,"__hash__":159},"projects_es\u002Fprojects\u002Fes\u002Fcontext-architecture.md","Context Architecture",{"type":19,"value":138,"toc":142},[139],[22,140,141],{},"La práctica que creé para estructurar un repo de forma que su intención y su comportamiento sean igual de legibles para personas y agentes. El repo es el contexto: le creen al código, no a tu prompt.",{"title":31,"searchDepth":32,"depth":33,"links":143},[],"Cómo estructurar un repo para que personas y agentes lo entiendan igual.",[146,148],{"label":84,"url":147},"https:\u002F\u002Fgithub.com\u002Fsergioazoc\u002Fcontext-architecture",{"label":149,"url":150},"Leer el post","https:\u002F\u002Fsergioazocar.com\u002Fblog\u002Fcontext-architecture-el-repo-entero-es-contexto\u002F",{},"3","\u002Fprojects\u002Fes\u002Fcontext-architecture",{"title":136,"description":144},"projects\u002Fes\u002Fcontext-architecture","context-architecture","https:\u002F\u002Fcontext-architecture.dev","context-architecture.dev","OXzxrW72z5ALzhQorfWmqXBXYR0sipyXVzsZab5Gfd4",1792609490277]