[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"verticals":3,"tag-node-2":44,"search-suggestions":140,"tags-all":177},[4,20,32],{"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","Read it. Run it. Prove it.","A post a day on modern web development — most with an editable playground and a quiz that explains every answer. Free, no account needed.","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.","Grammar explained the way good documentation explains an API — one idea at a time, each with a quiz.","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,{"id":33,"slug":34,"name":35,"tagline":36,"description":37,"accentFrom":38,"accentTo":39,"icon":40,"defaultLocale":13,"locales":41,"features":42,"position":43},"7b3c16f2-931d-410e-802e-e1fa4edab7de","soft","Soft Skills","The half of the job nobody wrote documentation for.","Weekly, on the parts of working life that decide more than your code does — first weeks, meetings, interviews, promotions, and the people around you. Written from what actually happens, and recorded as a podcast you can listen to on the walk.","emerald-400","teal-300","◉",[13],{"courses":18,"paths":18,"articles":17,"exams":18,"flashcards":18,"packages":18,"community":17,"certificates":18,"teams":18,"commerce":18},3,{"items":45,"meta":137},[46,80,100,119],{"id":47,"slug":48,"title":49,"subtitle":50,"excerpt":51,"coverUrl":52,"locale":13,"readingMinutes":53,"publishedAt":54,"viewCount":55,"likeCount":19,"commentCount":19,"author":56,"vertical":61,"topic":62,"tags":65,"_count":77,"playground":79,"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",669,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},"019fe637-3c25-7088-9034-39c9f15dc3c8","Parsa Jiravand","parsa","Frontend engineer · building bestpractic",{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":63,"name":64},"javascript","JavaScript",[66,68,71,74],{"slug":63,"name":67,"color":50},"Javascript",{"slug":69,"name":70,"color":50},"webdev","Webdev",{"slug":72,"name":73,"color":50},"node","Node",{"slug":75,"name":76,"color":50},"typescript","Typescript",{"assessments":78},1,{"slug":48},{"id":81,"slug":82,"title":83,"subtitle":50,"excerpt":84,"coverUrl":85,"locale":13,"readingMinutes":53,"publishedAt":86,"viewCount":87,"likeCount":19,"commentCount":19,"author":88,"vertical":89,"topic":90,"tags":91,"_count":98,"playground":99,"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",422,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":63,"name":64},[92,93,94,97],{"slug":63,"name":67,"color":50},{"slug":69,"name":70,"color":50},{"slug":95,"name":96,"color":50},"frontend","Frontend",{"slug":72,"name":73,"color":50},{"assessments":78},{"slug":82},{"id":101,"slug":102,"title":103,"subtitle":50,"excerpt":104,"coverUrl":105,"locale":13,"readingMinutes":106,"publishedAt":107,"viewCount":108,"likeCount":19,"commentCount":19,"author":109,"vertical":110,"topic":111,"tags":112,"_count":117,"playground":118,"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",511,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":63,"name":64},[113,114,115,116],{"slug":63,"name":67,"color":50},{"slug":69,"name":70,"color":50},{"slug":95,"name":96,"color":50},{"slug":72,"name":73,"color":50},{"assessments":78},{"slug":102},{"id":120,"slug":121,"title":122,"subtitle":50,"excerpt":123,"coverUrl":124,"locale":13,"readingMinutes":53,"publishedAt":125,"viewCount":126,"likeCount":19,"commentCount":19,"author":127,"vertical":128,"topic":129,"tags":130,"_count":135,"playground":136,"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",498,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":63,"name":64},[131,132,133,134],{"slug":63,"name":67,"color":50},{"slug":69,"name":70,"color":50},{"slug":95,"name":96,"color":50},{"slug":72,"name":73,"color":50},{"assessments":78},{"slug":121},{"page":31,"perPage":138,"total":139,"totalPages":31},12,16,[141,143,145,147,151,155,159,161,165,169,173,174],{"slug":69,"name":70,"articles":142},174,{"slug":63,"name":67,"articles":144},141,{"slug":95,"name":96,"articles":146},96,{"slug":148,"name":149,"articles":150},"tutorial","Tutorial",71,{"slug":152,"name":153,"articles":154},"css","Css",51,{"slug":156,"name":157,"articles":158},"performance","Performance",30,{"slug":75,"name":76,"articles":160},25,{"slug":162,"name":163,"articles":164},"react","React",20,{"slug":166,"name":167,"articles":168},"programming","Programming",19,{"slug":170,"name":171,"articles":172},"browser","Browser",18,{"slug":72,"name":73,"articles":139},{"slug":175,"name":176,"articles":138},"html","Html",[178,179,180,181,182,183,184,185,186,187,188,189,190,194,198,201,205,209,212,215,219,222,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277],{"slug":69,"name":70,"color":50,"articles":142},{"slug":63,"name":67,"color":50,"articles":144},{"slug":95,"name":96,"color":50,"articles":146},{"slug":148,"name":149,"color":50,"articles":150},{"slug":152,"name":153,"color":50,"articles":154},{"slug":156,"name":157,"color":50,"articles":158},{"slug":75,"name":76,"color":50,"articles":160},{"slug":162,"name":163,"color":50,"articles":164},{"slug":166,"name":167,"color":50,"articles":168},{"slug":170,"name":171,"color":50,"articles":172},{"slug":72,"name":73,"color":50,"articles":139},{"slug":175,"name":176,"color":50,"articles":138},{"slug":191,"name":192,"color":50,"articles":193},"nextjs","Nextjs",11,{"slug":195,"name":196,"color":50,"articles":197},"vue","Vue",10,{"slug":199,"name":200,"color":50,"articles":197},"accessibility","Accessibility",{"slug":202,"name":203,"color":50,"articles":204},"nestjs","Nestjs",9,{"slug":206,"name":207,"color":50,"articles":208},"nuxt","Nuxt",8,{"slug":210,"name":211,"color":50,"articles":208},"career","Career",{"slug":213,"name":214,"color":50,"articles":208},"discuss","Discuss",{"slug":216,"name":217,"color":50,"articles":218},"beginners","Beginners",7,{"slug":220,"name":221,"color":50,"articles":218},"productivity","Productivity",{"slug":223,"name":224,"color":50,"articles":225},"grammar","Grammar",6,{"slug":227,"name":228,"color":50,"articles":106},"security","Security",{"slug":230,"name":231,"color":50,"articles":53},"ssr","SSR",{"slug":233,"name":234,"color":50,"articles":53},"apis","Apis",{"slug":236,"name":237,"color":50,"articles":43},"ai","Ai",{"slug":239,"name":240,"color":50,"articles":43},"api","API",{"slug":242,"name":243,"color":50,"articles":43},"caching","Caching",{"slug":245,"name":246,"color":50,"articles":31},"async","Async",{"slug":248,"name":249,"color":50,"articles":31},"forms","Forms",{"slug":251,"name":252,"color":50,"articles":31},"dom","Dom",{"slug":254,"name":255,"color":50,"articles":31},"backend","Backend",{"slug":257,"name":258,"color":50,"articles":31},"english","English",{"slug":260,"name":261,"color":50,"articles":31},"verbs","Verbs",{"slug":263,"name":264,"color":50,"articles":31},"spanish","Spanish",{"slug":266,"name":267,"color":50,"articles":31},"a1","A1",{"slug":269,"name":270,"color":50,"articles":31},"a2","A2",{"slug":272,"name":273,"color":50,"articles":31},"tenses","Tenses",{"slug":275,"name":276,"color":50,"articles":31},"turkish","Turkish",{"slug":278,"name":279,"color":50,"articles":31},"animation","Animation"]