[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"verticals":3,"tag-tutorial-3":44,"search-suggestions":225,"tags-all":256},[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":222},[46,80,101,121,140,162,182,203],{"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},"01a02839-480f-7428-914a-2c0442d00855","intl-segmenter-grapheme-word-sentence","You're truncating bios with `.slice()`. `Intl.Segmenter` knows where the emoji actually end.",null,"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",5,"2026-08-27T17:30:57.707Z",305,{"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},"frontend","Frontend",{"slug":75,"name":76,"color":50},"tutorial","Tutorial",{"assessments":78},1,{"slug":48},{"id":81,"slug":82,"title":83,"subtitle":50,"excerpt":84,"coverUrl":85,"locale":13,"readingMinutes":86,"publishedAt":87,"viewCount":88,"likeCount":19,"commentCount":19,"author":89,"vertical":90,"topic":91,"tags":92,"_count":99,"playground":100,"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",449,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":63,"name":64},[93,94,95,96],{"slug":63,"name":67,"color":50},{"slug":69,"name":70,"color":50},{"slug":75,"name":76,"color":50},{"slug":97,"name":98,"color":50},"programming","Programming",{"assessments":78},{"slug":82},{"id":102,"slug":103,"title":104,"subtitle":50,"excerpt":105,"coverUrl":106,"locale":13,"readingMinutes":86,"publishedAt":107,"viewCount":108,"likeCount":19,"commentCount":78,"author":109,"vertical":110,"topic":111,"tags":114,"_count":119,"playground":120,"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",630,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":112,"name":113},"vue","Vue",[115,116,117,118],{"slug":112,"name":113,"color":50},{"slug":63,"name":67,"color":50},{"slug":75,"name":76,"color":50},{"slug":69,"name":70,"color":50},{"assessments":78},{"slug":103},{"id":122,"slug":123,"title":124,"subtitle":50,"excerpt":125,"coverUrl":126,"locale":13,"readingMinutes":127,"publishedAt":128,"viewCount":129,"likeCount":19,"commentCount":19,"author":130,"vertical":131,"topic":132,"tags":133,"_count":138,"playground":139,"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",490,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":63,"name":64},[134,135,136,137],{"slug":63,"name":67,"color":50},{"slug":69,"name":70,"color":50},{"slug":75,"name":76,"color":50},{"slug":97,"name":98,"color":50},{"assessments":78},{"slug":123},{"id":141,"slug":142,"title":143,"subtitle":50,"excerpt":144,"coverUrl":145,"locale":13,"readingMinutes":146,"publishedAt":147,"viewCount":148,"likeCount":19,"commentCount":19,"author":149,"vertical":150,"topic":151,"tags":154,"_count":160,"playground":161,"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",4,"2026-08-18T06:50:52.267Z",582,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":152,"name":153},"css","CSS",[155,157,158,159],{"slug":152,"name":156,"color":50},"Css",{"slug":69,"name":70,"color":50},{"slug":72,"name":73,"color":50},{"slug":75,"name":76,"color":50},{"assessments":78},{"slug":142},{"id":163,"slug":164,"title":165,"subtitle":50,"excerpt":166,"coverUrl":167,"locale":13,"readingMinutes":86,"publishedAt":168,"viewCount":169,"likeCount":19,"commentCount":19,"author":170,"vertical":171,"topic":172,"tags":175,"_count":180,"playground":181,"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",661,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":173,"name":174},"security","Security",[176,177,178,179],{"slug":69,"name":70,"color":50},{"slug":173,"name":174,"color":50},{"slug":63,"name":67,"color":50},{"slug":75,"name":76,"color":50},{"assessments":78},{"slug":164},{"id":183,"slug":184,"title":185,"subtitle":50,"excerpt":186,"coverUrl":187,"locale":13,"readingMinutes":127,"publishedAt":188,"viewCount":189,"likeCount":19,"commentCount":19,"author":190,"vertical":191,"topic":192,"tags":195,"_count":201,"playground":202,"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",353,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":193,"name":194},"typescript","TypeScript",[196,198,199,200],{"slug":193,"name":197,"color":50},"Typescript",{"slug":63,"name":67,"color":50},{"slug":75,"name":76,"color":50},{"slug":69,"name":70,"color":50},{"assessments":78},{"slug":184},{"id":204,"slug":205,"title":206,"subtitle":50,"excerpt":207,"coverUrl":208,"locale":13,"readingMinutes":209,"publishedAt":210,"viewCount":211,"likeCount":19,"commentCount":19,"author":212,"vertical":213,"topic":214,"tags":215,"_count":220,"playground":221,"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",13,"2026-07-13T09:36:33.464Z",509,{"id":57,"name":58,"username":59,"avatarUrl":50,"headline":60},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":63,"name":64},[216,217,218,219],{"slug":63,"name":67,"color":50},{"slug":69,"name":70,"color":50},{"slug":75,"name":76,"color":50},{"slug":97,"name":98,"color":50},{"assessments":78},{"slug":205},{"page":43,"perPage":223,"total":224,"totalPages":43},12,32,[226,228,230,232,234,235,236,239,242,246,249,253],{"slug":69,"name":70,"articles":227},103,{"slug":63,"name":67,"articles":229},87,{"slug":72,"name":73,"articles":231},71,{"slug":152,"name":156,"articles":233},34,{"slug":75,"name":76,"articles":224},{"slug":193,"name":197,"articles":127},{"slug":237,"name":238,"articles":209},"react","React",{"slug":240,"name":241,"articles":223},"performance","Performance",{"slug":243,"name":244,"articles":245},"browser","Browser",9,{"slug":247,"name":248,"articles":245},"node","Node",{"slug":250,"name":251,"articles":252},"html","Html",6,{"slug":254,"name":255,"articles":252},"grammar","Grammar",[257,258,259,260,261,262,263,264,265,266,267,268,269,270,273,276,279,282,285,288,291,292,295,298,301,304,307,310,313,316,319,322,323,326,329,332],{"slug":69,"name":70,"color":50,"articles":227},{"slug":63,"name":67,"color":50,"articles":229},{"slug":72,"name":73,"color":50,"articles":231},{"slug":152,"name":156,"color":50,"articles":233},{"slug":75,"name":76,"color":50,"articles":224},{"slug":193,"name":197,"color":50,"articles":127},{"slug":237,"name":238,"color":50,"articles":209},{"slug":240,"name":241,"color":50,"articles":223},{"slug":247,"name":248,"color":50,"articles":245},{"slug":243,"name":244,"color":50,"articles":245},{"slug":97,"name":98,"color":50,"articles":252},{"slug":250,"name":251,"color":50,"articles":252},{"slug":254,"name":255,"color":50,"articles":252},{"slug":271,"name":272,"color":50,"articles":252},"accessibility","Accessibility",{"slug":274,"name":275,"color":50,"articles":146},"nestjs","Nestjs",{"slug":277,"name":278,"color":50,"articles":146},"apis","Apis",{"slug":280,"name":281,"color":50,"articles":43},"nuxt","Nuxt",{"slug":283,"name":284,"color":50,"articles":43},"ssr","SSR",{"slug":286,"name":287,"color":50,"articles":43},"nextjs","Nextjs",{"slug":289,"name":290,"color":50,"articles":43},"ai","Ai",{"slug":173,"name":174,"color":50,"articles":31},{"slug":293,"name":294,"color":50,"articles":31},"async","Async",{"slug":296,"name":297,"color":50,"articles":31},"forms","Forms",{"slug":299,"name":300,"color":50,"articles":31},"api","API",{"slug":302,"name":303,"color":50,"articles":31},"english","English",{"slug":305,"name":306,"color":50,"articles":31},"verbs","Verbs",{"slug":308,"name":309,"color":50,"articles":31},"spanish","Spanish",{"slug":311,"name":312,"color":50,"articles":31},"a1","A1",{"slug":314,"name":315,"color":50,"articles":31},"a2","A2",{"slug":317,"name":318,"color":50,"articles":31},"tenses","Tenses",{"slug":320,"name":321,"color":50,"articles":31},"turkish","Turkish",{"slug":112,"name":113,"color":50,"articles":31},{"slug":324,"name":325,"color":50,"articles":31},"career","Career",{"slug":327,"name":328,"color":50,"articles":31},"beginners","Beginners",{"slug":330,"name":331,"color":50,"articles":31},"productivity","Productivity",{"slug":333,"name":334,"color":50,"articles":31},"discuss","Discuss"]