[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"verticals":3,"search-suggestions":44,"tag-apis-1":92,"tags-all":141},[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,[45,49,53,57,61,65,69,73,77,81,85,89],{"slug":46,"name":47,"articles":48},"webdev","Webdev",75,{"slug":50,"name":51,"articles":52},"frontend","Frontend",64,{"slug":54,"name":55,"articles":56},"javascript","Javascript",63,{"slug":58,"name":59,"articles":60},"css","Css",29,{"slug":62,"name":63,"articles":64},"tutorial","Tutorial",15,{"slug":66,"name":67,"articles":68},"typescript","Typescript",11,{"slug":70,"name":71,"articles":72},"performance","Performance",10,{"slug":74,"name":75,"articles":76},"react","React",7,{"slug":78,"name":79,"articles":80},"grammar","Grammar",6,{"slug":82,"name":83,"articles":84},"node","Node",5,{"slug":86,"name":87,"articles":88},"programming","Programming",4,{"slug":90,"name":91,"articles":88},"html","Html",{"items":93,"meta":139},[94,121],{"id":95,"slug":96,"title":97,"subtitle":98,"excerpt":99,"coverUrl":100,"locale":13,"readingMinutes":80,"publishedAt":101,"viewCount":102,"likeCount":19,"commentCount":19,"author":103,"vertical":108,"topic":109,"tags":111,"_count":118,"playground":120,"hasQuiz":17,"hasPlayground":17},"01a03cdb-3743-73ef-ab9d-21f03158ca35","server-sent-events-eventsource-live-updates","You Don't Need a WebSocket for That Live Feed",null,"A live notification badge, a progress bar, a dashboard counter — you reached for socket.io and started hand-rolling reconnect logic. The browser already ships a simpler API that does it for you.","\u002Fmedia\u002Fcovers\u002Fserver-sent-events-eventsource-live-updates.png","2026-08-31T13:11:42.385Z",9,{"id":104,"name":105,"username":106,"avatarUrl":98,"headline":107},"019fe637-3c25-7088-9034-39c9f15dc3c8","Parsa Jiravand","parsa","Frontend engineer · building bestpractic",{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":54,"name":110},"JavaScript",[112,113,114,115],{"slug":54,"name":55,"color":98},{"slug":46,"name":47,"color":98},{"slug":62,"name":63,"color":98},{"slug":116,"name":117,"color":98},"apis","Apis",{"assessments":119},1,{"slug":96},{"id":122,"slug":123,"title":124,"subtitle":98,"excerpt":125,"coverUrl":126,"locale":13,"readingMinutes":88,"publishedAt":127,"viewCount":128,"likeCount":19,"commentCount":19,"author":129,"vertical":130,"topic":131,"tags":132,"_count":137,"playground":138,"hasQuiz":17,"hasPlayground":17},"019fe660-fcbe-745e-a443-5ae33ac10aaf","broadcast-channel-cross-tab-messaging","Stop using the localStorage hack to sync browser tabs. BroadcastChannel does it natively.","Syncing state across browser tabs with localStorage events is a widely-used trick that requires JSON.stringify, event filtering, and careful cleanup. The Broadcast Channel API delivers messages between tabs directly, with none of the side effects.","\u002Fmedia\u002Fcovers\u002Fbroadcast-channel-cross-tab-messaging.png","2026-08-09T07:02:41.629Z",1091,{"id":104,"name":105,"username":106,"avatarUrl":98,"headline":107},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":54,"name":110},[133,134,135,136],{"slug":54,"name":55,"color":98},{"slug":46,"name":47,"color":98},{"slug":50,"name":51,"color":98},{"slug":116,"name":117,"color":98},{"assessments":119},{"slug":123},{"page":119,"perPage":140,"total":31,"totalPages":119},12,[142,143,144,145,146,147,148,149,150,151,152,153,154,157,160,163,164,167,170,173,176,179,182,185],{"slug":46,"name":47,"color":98,"articles":48},{"slug":50,"name":51,"color":98,"articles":52},{"slug":54,"name":55,"color":98,"articles":56},{"slug":58,"name":59,"color":98,"articles":60},{"slug":62,"name":63,"color":98,"articles":64},{"slug":66,"name":67,"color":98,"articles":68},{"slug":70,"name":71,"color":98,"articles":72},{"slug":74,"name":75,"color":98,"articles":76},{"slug":78,"name":79,"color":98,"articles":80},{"slug":82,"name":83,"color":98,"articles":84},{"slug":86,"name":87,"color":98,"articles":88},{"slug":90,"name":91,"color":98,"articles":88},{"slug":155,"name":156,"color":98,"articles":43},"ai","Ai",{"slug":158,"name":159,"color":98,"articles":43},"accessibility","Accessibility",{"slug":161,"name":162,"color":98,"articles":31},"async","Async",{"slug":116,"name":117,"color":98,"articles":31},{"slug":165,"name":166,"color":98,"articles":31},"english","English",{"slug":168,"name":169,"color":98,"articles":31},"verbs","Verbs",{"slug":171,"name":172,"color":98,"articles":31},"spanish","Spanish",{"slug":174,"name":175,"color":98,"articles":31},"a1","A1",{"slug":177,"name":178,"color":98,"articles":31},"a2","A2",{"slug":180,"name":181,"color":98,"articles":31},"tenses","Tenses",{"slug":183,"name":184,"color":98,"articles":31},"turkish","Turkish",{"slug":186,"name":187,"color":98,"articles":31},"browser","Browser"]