[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"verticals":3,"tag-tutorial-6":44,"search-suggestions":285,"tags-all":314},[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":281},[46,79,103,127,146,167,187,206,224,244,263],{"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":76,"playground":78,"hasQuiz":17,"hasPlayground":17},"01a04446-373a-775b-8aaf-b72c8952123d","react-weekly-rerender-vs-remount","React Re-render vs Remount: What Actually Triggers Each",null,"A practical guide to React re-render vs remount: what type, position, and key decide, why state resets unexpectedly, and how to force a remount.","\u002Fmedia\u002Fcovers\u002Freact-weekly-rerender-vs-remount.png",13,"2026-08-29T12:32:41.200Z",831,{"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},"react","React",[66,67,70,73],{"slug":63,"name":64,"color":50},{"slug":68,"name":69,"color":50},"javascript","Javascript",{"slug":71,"name":72,"color":50},"tutorial","Tutorial",{"slug":74,"name":75,"color":50},"webdev","Webdev",{"assessments":77},1,{"slug":48},{"id":80,"slug":81,"title":82,"subtitle":50,"excerpt":83,"coverUrl":84,"locale":13,"readingMinutes":53,"publishedAt":85,"viewCount":86,"likeCount":19,"commentCount":19,"author":87,"vertical":88,"topic":89,"tags":92,"_count":101,"playground":102,"hasQuiz":17,"hasPlayground":17},"01a03cdb-22ef-748a-b555-8071c7a905e6","nestjs-weekly-request-lifecycle","NestJS Request Lifecycle Explained (with Cheat Sheet)","A complete guide to the NestJS request lifecycle: the exact order middleware, guards, interceptors, pipes, and filters run, and why it matters.","\u002Fmedia\u002Fcovers\u002Fnestjs-weekly-request-lifecycle.png","2026-08-28T17:01:41.941Z",946,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":90,"name":91},"nestjs","Nestjs",[93,94,97,100],{"slug":90,"name":91,"color":50},{"slug":95,"name":96,"color":50},"node","Node",{"slug":98,"name":99,"color":50},"typescript","Typescript",{"slug":71,"name":72,"color":50},{"assessments":77},{"slug":81},{"id":104,"slug":105,"title":106,"subtitle":50,"excerpt":107,"coverUrl":108,"locale":13,"readingMinutes":109,"publishedAt":110,"viewCount":111,"likeCount":19,"commentCount":19,"author":112,"vertical":113,"topic":114,"tags":117,"_count":125,"playground":126,"hasQuiz":17,"hasPlayground":17},"01a02d61-19cf-72cd-8490-a59e14f8839c","css-grid-auto-fit-vs-auto-fill","Your Grid Has Invisible Columns: auto-fill vs auto-fit","A responsive card grid that works perfectly with twelve items breaks with two — not from a bug, but from one word in a repeat() you copy-pasted without reading.","\u002Fmedia\u002Fcovers\u002Fcss-grid-auto-fit-vs-auto-fill.png",5,"2026-08-28T17:00:06.666Z",738,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":115,"name":116},"css","CSS",[118,120,121,124],{"slug":115,"name":119,"color":50},"Css",{"slug":74,"name":75,"color":50},{"slug":122,"name":123,"color":50},"frontend","Frontend",{"slug":71,"name":72,"color":50},{"assessments":77},{"slug":105},{"id":128,"slug":129,"title":130,"subtitle":50,"excerpt":131,"coverUrl":132,"locale":13,"readingMinutes":109,"publishedAt":133,"viewCount":134,"likeCount":19,"commentCount":19,"author":135,"vertical":136,"topic":137,"tags":139,"_count":144,"playground":145,"hasQuiz":17,"hasPlayground":17},"01a02839-480f-7428-914a-2c0442d00855","intl-segmenter-grapheme-word-sentence","You're truncating bios with `.slice()`. `Intl.Segmenter` knows where the emoji actually end.","A 30-character bio limit that cuts off mid-emoji isn't a rendering bug — it's .length counting UTF-16 code units instead of what's on screen. Intl.Segmenter counts graphemes, words, and sentences the way a reader actually sees them, and every major browser supports it now.","\u002Fmedia\u002Fcovers\u002Fintl-segmenter-grapheme-word-sentence.png","2026-08-27T17:30:57.707Z",1009,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":68,"name":138},"JavaScript",[140,141,142,143],{"slug":68,"name":69,"color":50},{"slug":74,"name":75,"color":50},{"slug":122,"name":123,"color":50},{"slug":71,"name":72,"color":50},{"assessments":77},{"slug":129},{"id":147,"slug":148,"title":149,"subtitle":50,"excerpt":150,"coverUrl":151,"locale":13,"readingMinutes":152,"publishedAt":153,"viewCount":154,"likeCount":19,"commentCount":19,"author":155,"vertical":156,"topic":157,"tags":158,"_count":165,"playground":166,"hasQuiz":17,"hasPlayground":17},"019fe661-0c1b-7408-8419-531dae95bdf1","weekly-javascript-closures","JavaScript Closures: The Complete Guide (with Cheat Sheet)","Learn how JavaScript closures really work — lexical scope, private state, memoization, and the classic loop bug — with worked examples and a cheat sheet.","\u002Fmedia\u002Fcovers\u002Fweekly-javascript-closures.png",14,"2026-08-25T08:53:48.904Z",910,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":68,"name":138},[159,160,161,162],{"slug":68,"name":69,"color":50},{"slug":74,"name":75,"color":50},{"slug":71,"name":72,"color":50},{"slug":163,"name":164,"color":50},"programming","Programming",{"assessments":77},{"slug":148},{"id":168,"slug":169,"title":170,"subtitle":50,"excerpt":171,"coverUrl":172,"locale":13,"readingMinutes":152,"publishedAt":173,"viewCount":174,"likeCount":19,"commentCount":77,"author":175,"vertical":176,"topic":177,"tags":180,"_count":185,"playground":186,"hasQuiz":17,"hasPlayground":17},"01a03410-2db8-735b-88b2-5285459dc915","vue-weekly-reactivity-ref-vs-reactive","Vue Reactivity Explained: ref vs reactive (+ Cheat Sheet)","A complete guide to Vue reactivity: how ref and reactive really work, why destructuring breaks updates, when to use each, and a copy-paste cheat sheet.","\u002Fmedia\u002Fcovers\u002Fvue-weekly-reactivity-ref-vs-reactive.png","2026-08-24T13:57:38.080Z",1151,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":178,"name":179},"vue","Vue",[181,182,183,184],{"slug":178,"name":179,"color":50},{"slug":68,"name":69,"color":50},{"slug":71,"name":72,"color":50},{"slug":74,"name":75,"color":50},{"assessments":77},{"slug":169},{"id":188,"slug":189,"title":190,"subtitle":50,"excerpt":191,"coverUrl":192,"locale":13,"readingMinutes":193,"publishedAt":194,"viewCount":195,"likeCount":19,"commentCount":19,"author":196,"vertical":197,"topic":198,"tags":199,"_count":204,"playground":205,"hasQuiz":17,"hasPlayground":17},"019fe660-932f-704d-80f6-f8646b604799","weekly-javascript-proxy-reflect","JavaScript Proxy and Reflect: The Complete Guide","Learn JavaScript Proxy and Reflect from the ground up — traps, invariants, and reactive state — with worked examples and a copy-paste cheat sheet.","\u002Fmedia\u002Fcovers\u002Fweekly-javascript-proxy-reflect.png",15,"2026-08-24T07:06:37.948Z",932,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":68,"name":138},[200,201,202,203],{"slug":68,"name":69,"color":50},{"slug":74,"name":75,"color":50},{"slug":71,"name":72,"color":50},{"slug":163,"name":164,"color":50},{"assessments":77},{"slug":189},{"id":207,"slug":208,"title":209,"subtitle":50,"excerpt":210,"coverUrl":211,"locale":13,"readingMinutes":109,"publishedAt":212,"viewCount":213,"likeCount":19,"commentCount":19,"author":214,"vertical":215,"topic":216,"tags":217,"_count":222,"playground":223,"hasQuiz":17,"hasPlayground":17},"019fff35-4908-727e-b7a3-dafd1ada4784","css-scroll-snap-native-carousel","I Ripped Out a Carousel Library. CSS Replaced It.","A scroll listener, a debounce, and 200 lines of carousel-library glue code — replaced by three CSS properties that snap smoother than any of it did.","\u002Fmedia\u002Fcovers\u002Fcss-scroll-snap-native-carousel.png","2026-08-18T06:50:52.267Z",942,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":115,"name":116},[218,219,220,221],{"slug":115,"name":119,"color":50},{"slug":74,"name":75,"color":50},{"slug":122,"name":123,"color":50},{"slug":71,"name":72,"color":50},{"assessments":77},{"slug":208},{"id":225,"slug":226,"title":227,"subtitle":50,"excerpt":228,"coverUrl":229,"locale":13,"readingMinutes":193,"publishedAt":230,"viewCount":231,"likeCount":19,"commentCount":19,"author":232,"vertical":233,"topic":234,"tags":237,"_count":242,"playground":243,"hasQuiz":17,"hasPlayground":17},"019fe660-cf2a-71df-b517-8d722f92cc37","weekly-cors-explained","CORS Explained: The Complete Guide (with Cheat Sheet)","A complete guide to CORS: the same-origin policy, preflight requests, and Access-Control-Allow-Origin headers — with worked examples and a cheat sheet.","\u002Fmedia\u002Fcovers\u002Fweekly-cors-explained.png","2026-08-03T09:54:26.268Z",1069,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":235,"name":236},"security","Security",[238,239,240,241],{"slug":74,"name":75,"color":50},{"slug":235,"name":236,"color":50},{"slug":68,"name":69,"color":50},{"slug":71,"name":72,"color":50},{"assessments":77},{"slug":226},{"id":245,"slug":246,"title":247,"subtitle":50,"excerpt":248,"coverUrl":249,"locale":13,"readingMinutes":193,"publishedAt":250,"viewCount":251,"likeCount":19,"commentCount":19,"author":252,"vertical":253,"topic":254,"tags":256,"_count":261,"playground":262,"hasQuiz":17,"hasPlayground":17},"019fe660-57eb-7258-b452-d66ff04d2380","weekly-typescript-generics","TypeScript Generics: The Complete Guide (with Cheat Sheet)","Learn TypeScript generics from the ground up — generic functions, constraints, defaults, and classes — with worked examples and a copy-paste cheat sheet.","\u002Fmedia\u002Fcovers\u002Fweekly-typescript-generics.png","2026-07-20T09:23:23.621Z",733,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":98,"name":255},"TypeScript",[257,258,259,260],{"slug":98,"name":99,"color":50},{"slug":68,"name":69,"color":50},{"slug":71,"name":72,"color":50},{"slug":74,"name":75,"color":50},{"assessments":77},{"slug":246},{"id":264,"slug":265,"title":266,"subtitle":50,"excerpt":267,"coverUrl":268,"locale":13,"readingMinutes":53,"publishedAt":269,"viewCount":270,"likeCount":19,"commentCount":19,"author":271,"vertical":272,"topic":273,"tags":274,"_count":279,"playground":280,"hasQuiz":17,"hasPlayground":17},"019fe660-2335-7652-9e51-7c6f28871874","weekly-javascript-event-loop","JavaScript Event Loop Explained: The Complete Guide","Learn how the JavaScript event loop really works — call stack, microtasks, and macrotasks — with worked examples, edge cases, and a cheat sheet.","\u002Fmedia\u002Fcovers\u002Fweekly-javascript-event-loop.png","2026-07-13T09:36:33.464Z",969,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":68,"name":138},[275,276,277,278],{"slug":68,"name":69,"color":50},{"slug":74,"name":75,"color":50},{"slug":71,"name":72,"color":50},{"slug":163,"name":164,"color":50},{"assessments":77},{"slug":265},{"page":282,"perPage":283,"total":284,"totalPages":282},6,12,71,[286,288,290,292,293,295,299,301,303,305,309,311],{"slug":74,"name":75,"articles":287},174,{"slug":68,"name":69,"articles":289},141,{"slug":122,"name":123,"articles":291},96,{"slug":71,"name":72,"articles":284},{"slug":115,"name":119,"articles":294},51,{"slug":296,"name":297,"articles":298},"performance","Performance",30,{"slug":98,"name":99,"articles":300},25,{"slug":63,"name":64,"articles":302},20,{"slug":163,"name":164,"articles":304},19,{"slug":306,"name":307,"articles":308},"browser","Browser",18,{"slug":95,"name":96,"articles":310},16,{"slug":312,"name":313,"articles":283},"html","Html",[315,316,317,318,319,320,321,322,323,324,325,326,327,331,333,336,338,342,345,348,352,355,358,359,363,366,369,372,375,378,381,384,387,390,393,396,399,402,405,408],{"slug":74,"name":75,"color":50,"articles":287},{"slug":68,"name":69,"color":50,"articles":289},{"slug":122,"name":123,"color":50,"articles":291},{"slug":71,"name":72,"color":50,"articles":284},{"slug":115,"name":119,"color":50,"articles":294},{"slug":296,"name":297,"color":50,"articles":298},{"slug":98,"name":99,"color":50,"articles":300},{"slug":63,"name":64,"color":50,"articles":302},{"slug":163,"name":164,"color":50,"articles":304},{"slug":306,"name":307,"color":50,"articles":308},{"slug":95,"name":96,"color":50,"articles":310},{"slug":312,"name":313,"color":50,"articles":283},{"slug":328,"name":329,"color":50,"articles":330},"nextjs","Nextjs",11,{"slug":178,"name":179,"color":50,"articles":332},10,{"slug":334,"name":335,"color":50,"articles":332},"accessibility","Accessibility",{"slug":90,"name":91,"color":50,"articles":337},9,{"slug":339,"name":340,"color":50,"articles":341},"nuxt","Nuxt",8,{"slug":343,"name":344,"color":50,"articles":341},"career","Career",{"slug":346,"name":347,"color":50,"articles":341},"discuss","Discuss",{"slug":349,"name":350,"color":50,"articles":351},"beginners","Beginners",7,{"slug":353,"name":354,"color":50,"articles":351},"productivity","Productivity",{"slug":356,"name":357,"color":50,"articles":282},"grammar","Grammar",{"slug":235,"name":236,"color":50,"articles":109},{"slug":360,"name":361,"color":50,"articles":362},"ssr","SSR",4,{"slug":364,"name":365,"color":50,"articles":362},"apis","Apis",{"slug":367,"name":368,"color":50,"articles":43},"ai","Ai",{"slug":370,"name":371,"color":50,"articles":43},"api","API",{"slug":373,"name":374,"color":50,"articles":43},"caching","Caching",{"slug":376,"name":377,"color":50,"articles":31},"async","Async",{"slug":379,"name":380,"color":50,"articles":31},"forms","Forms",{"slug":382,"name":383,"color":50,"articles":31},"dom","Dom",{"slug":385,"name":386,"color":50,"articles":31},"backend","Backend",{"slug":388,"name":389,"color":50,"articles":31},"english","English",{"slug":391,"name":392,"color":50,"articles":31},"verbs","Verbs",{"slug":394,"name":395,"color":50,"articles":31},"spanish","Spanish",{"slug":397,"name":398,"color":50,"articles":31},"a1","A1",{"slug":400,"name":401,"color":50,"articles":31},"a2","A2",{"slug":403,"name":404,"color":50,"articles":31},"tenses","Tenses",{"slug":406,"name":407,"color":50,"articles":31},"turkish","Turkish",{"slug":409,"name":410,"color":50,"articles":31},"animation","Animation"]