[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"verticals":3,"tag-node-1":32,"tags-dev":127},[4,20],{"id":5,"slug":6,"name":7,"tagline":8,"description":9,"accentFrom":10,"accentTo":11,"icon":12,"defaultLocale":13,"locales":14,"features":16,"position":19},"019fe637-3d33-714b-b57f-23e163ffca0c","dev","Web Development","Build. Learn. Ship.","Practical courses, engineering-grade articles and open-source tools for people who ship.","violet-500","cyan-400","◇","en",[13,15],"fa",{"courses":17,"paths":17,"articles":17,"exams":18,"flashcards":18,"packages":17,"community":17,"certificates":17,"teams":17,"commerce":17},true,false,0,{"id":21,"slug":22,"name":23,"tagline":24,"description":25,"accentFrom":26,"accentTo":10,"icon":27,"defaultLocale":13,"locales":28,"features":30,"position":31},"019fe637-3dc2-754c-8657-0f175bfee7c6","lang","Languages","Learn a language the way you learn a codebase.","Structured paths, listening drills and spaced repetition that actually sticks.","amber-400","⌘",[13,15,29],"es",{"courses":18,"paths":18,"articles":17,"exams":18,"flashcards":17,"packages":18,"community":17,"certificates":17,"teams":18,"commerce":18},2,{"items":33,"meta":125},[34,68,88,107],{"id":35,"slug":36,"title":37,"subtitle":38,"excerpt":39,"coverUrl":40,"locale":13,"readingMinutes":41,"publishedAt":42,"viewCount":43,"likeCount":19,"commentCount":19,"author":44,"vertical":49,"topic":50,"tags":53,"_count":65,"playground":67,"hasQuiz":17,"hasPlayground":17},"019fe660-5f55-701e-9cf4-dc0c9f0517b9","error-cause-rethrow-context","You're rethrowing errors and losing context. `Error.cause` fixes that.",null,"Every time you catch an error and rethrow a new one without forwarding the original, you lose the stack trace, the error type, and everything useful about what actually went wrong. ES2022 added `Error.cause` to fix exactly this.","\u002Fmedia\u002Fcovers\u002Ferror-cause-rethrow-context.png",4,"2026-07-21T08:36:02.331Z",62,{"id":45,"name":46,"username":47,"avatarUrl":38,"headline":48},"019fe637-3c25-7088-9034-39c9f15dc3c8","Parsa Jiravand","parsa","Frontend engineer · building bestpractic",{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":52},"javascript","JavaScript",[54,56,59,62],{"slug":51,"name":55,"color":38},"Javascript",{"slug":57,"name":58,"color":38},"webdev","Webdev",{"slug":60,"name":61,"color":38},"node","Node",{"slug":63,"name":64,"color":38},"typescript","Typescript",{"assessments":66},1,{"slug":36},{"id":69,"slug":70,"title":71,"subtitle":38,"excerpt":72,"coverUrl":73,"locale":13,"readingMinutes":41,"publishedAt":74,"viewCount":75,"likeCount":19,"commentCount":19,"author":76,"vertical":77,"topic":78,"tags":79,"_count":86,"playground":87,"hasQuiz":17,"hasPlayground":17},"019fe660-2b2e-71fb-a0d1-fd1509765d3b","object-groupby-replace-reduce","You've been writing this `reduce` a hundred times. `Object.groupBy` does it in one.","Grouping an array by a key is one of the most common data transforms in frontend code. You've been wiring it by hand with `reduce` for years. `Object.groupBy` is the native version — no helper, no library, no ceremony.","\u002Fmedia\u002Fcovers\u002Fobject-groupby-replace-reduce.png","2026-07-14T08:16:56.309Z",46,{"id":45,"name":46,"username":47,"avatarUrl":38,"headline":48},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":52},[80,81,82,85],{"slug":51,"name":55,"color":38},{"slug":57,"name":58,"color":38},{"slug":83,"name":84,"color":38},"frontend","Frontend",{"slug":60,"name":61,"color":38},{"assessments":66},{"slug":70},{"id":89,"slug":90,"title":91,"subtitle":38,"excerpt":92,"coverUrl":93,"locale":13,"readingMinutes":94,"publishedAt":95,"viewCount":96,"likeCount":19,"commentCount":19,"author":97,"vertical":98,"topic":99,"tags":100,"_count":105,"playground":106,"hasQuiz":17,"hasPlayground":17},"019fe660-1be2-74dd-aa56-0c8fd84204fd","promise-concurrency-all-settled-any-race","You reach for `Promise.all` for every concurrent request. Here's when to use the other three.","`Promise.all` fails the moment any one request fails. `allSettled`, `any`, and `race` each solve a different concurrency problem — dashboard partial results, CDN failover, and timeouts. Here's the taxonomy.","\u002Fmedia\u002Fcovers\u002Fpromise-concurrency-all-settled-any-race.png",5,"2026-07-13T09:36:32.501Z",36,{"id":45,"name":46,"username":47,"avatarUrl":38,"headline":48},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":52},[101,102,103,104],{"slug":51,"name":55,"color":38},{"slug":57,"name":58,"color":38},{"slug":83,"name":84,"color":38},{"slug":60,"name":61,"color":38},{"assessments":66},{"slug":90},{"id":108,"slug":109,"title":110,"subtitle":38,"excerpt":111,"coverUrl":112,"locale":13,"readingMinutes":41,"publishedAt":113,"viewCount":114,"likeCount":19,"commentCount":19,"author":115,"vertical":116,"topic":117,"tags":118,"_count":123,"playground":124,"hasQuiz":17,"hasPlayground":17},"019fe660-0596-7433-9dc2-0fc620be2d0f","structuredclone-deep-clone","You've been deep-cloning objects with a JSON hack. `structuredClone` does it right.","JSON.parse(JSON.stringify(obj)) silently corrupts Dates, Maps, Sets, and undefined values. structuredClone is the native replacement — no library, no import, no surprises.","\u002Fmedia\u002Fcovers\u002Fstructuredclone-deep-clone.png","2026-07-10T09:43:33.966Z",41,{"id":45,"name":46,"username":47,"avatarUrl":38,"headline":48},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":52},[119,120,121,122],{"slug":51,"name":55,"color":38},{"slug":57,"name":58,"color":38},{"slug":83,"name":84,"color":38},{"slug":60,"name":61,"color":38},{"assessments":66},{"slug":109},{"page":66,"perPage":126,"total":41,"totalPages":66},12,[128,130,132,134,138,140,144,147,148,152,155],{"slug":57,"name":58,"color":38,"articles":129},50,{"slug":51,"name":55,"color":38,"articles":131},45,{"slug":83,"name":84,"color":38,"articles":133},44,{"slug":135,"name":136,"color":38,"articles":137},"css","Css",18,{"slug":63,"name":64,"color":38,"articles":139},9,{"slug":141,"name":142,"color":38,"articles":143},"performance","Performance",7,{"slug":145,"name":146,"color":38,"articles":94},"react","React",{"slug":60,"name":61,"color":38,"articles":41},{"slug":149,"name":150,"color":38,"articles":151},"ai","Ai",3,{"slug":153,"name":154,"color":38,"articles":151},"tutorial","Tutorial",{"slug":156,"name":157,"color":38,"articles":151},"html","Html"]