[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"verticals":3,"blog-topics":44,"topics-all":165,"search-suggestions":245,"articles-all-5---":258,"articles-total":486},[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,50,54,58,62,66,70,74,78,82,85,89,92,95,98,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162],{"slug":46,"name":47,"color":48,"articles":49},"webdev","Webdev",null,103,{"slug":51,"name":52,"color":48,"articles":53},"javascript","Javascript",87,{"slug":55,"name":56,"color":48,"articles":57},"frontend","Frontend",71,{"slug":59,"name":60,"color":48,"articles":61},"css","Css",34,{"slug":63,"name":64,"color":48,"articles":65},"tutorial","Tutorial",32,{"slug":67,"name":68,"color":48,"articles":69},"typescript","Typescript",15,{"slug":71,"name":72,"color":48,"articles":73},"react","React",13,{"slug":75,"name":76,"color":48,"articles":77},"performance","Performance",12,{"slug":79,"name":80,"color":48,"articles":81},"node","Node",9,{"slug":83,"name":84,"color":48,"articles":81},"browser","Browser",{"slug":86,"name":87,"color":48,"articles":88},"programming","Programming",6,{"slug":90,"name":91,"color":48,"articles":88},"html","Html",{"slug":93,"name":94,"color":48,"articles":88},"grammar","Grammar",{"slug":96,"name":97,"color":48,"articles":88},"accessibility","Accessibility",{"slug":99,"name":100,"color":48,"articles":101},"nestjs","Nestjs",4,{"slug":103,"name":104,"color":48,"articles":101},"apis","Apis",{"slug":106,"name":107,"color":48,"articles":43},"nuxt","Nuxt",{"slug":109,"name":110,"color":48,"articles":43},"ssr","SSR",{"slug":112,"name":113,"color":48,"articles":43},"nextjs","Nextjs",{"slug":115,"name":116,"color":48,"articles":43},"ai","Ai",{"slug":118,"name":119,"color":48,"articles":31},"security","Security",{"slug":121,"name":122,"color":48,"articles":31},"async","Async",{"slug":124,"name":125,"color":48,"articles":31},"forms","Forms",{"slug":127,"name":128,"color":48,"articles":31},"api","API",{"slug":130,"name":131,"color":48,"articles":31},"english","English",{"slug":133,"name":134,"color":48,"articles":31},"verbs","Verbs",{"slug":136,"name":137,"color":48,"articles":31},"spanish","Spanish",{"slug":139,"name":140,"color":48,"articles":31},"a1","A1",{"slug":142,"name":143,"color":48,"articles":31},"a2","A2",{"slug":145,"name":146,"color":48,"articles":31},"tenses","Tenses",{"slug":148,"name":149,"color":48,"articles":31},"turkish","Turkish",{"slug":151,"name":152,"color":48,"articles":31},"vue","Vue",{"slug":154,"name":155,"color":48,"articles":31},"career","Career",{"slug":157,"name":158,"color":48,"articles":31},"beginners","Beginners",{"slug":160,"name":161,"color":48,"articles":31},"productivity","Productivity",{"slug":163,"name":164,"color":48,"articles":31},"discuss","Discuss",[166,172,174,179,181,186,189,193,198,203,205,210,213,217,219,223,225,228,232,234,236,239,241,243],{"id":167,"slug":168,"name":169,"parentId":48,"description":170,"articleCount":171},"0da12d3c-ac33-4b32-859f-9a16877ef255","starting","Starting somewhere new","First days, first weeks, and the part where you do not know anything yet.",1,{"id":173,"slug":151,"name":152,"parentId":48,"description":48,"articleCount":31},"019fe637-3e06-75b8-8a2c-fc350aad7701",{"id":175,"slug":176,"name":177,"parentId":48,"description":178,"articleCount":171},"9ef7e6f6-b287-4ac2-8f56-421d3aafe8cc","meetings","Meetings and rooms","Speaking up, running one, and knowing which kind you are in.",{"id":180,"slug":106,"name":107,"parentId":48,"description":48,"articleCount":43},"019fe637-3e06-75b8-8a2d-0309c35755c6",{"id":182,"slug":183,"name":184,"parentId":48,"description":185,"articleCount":19},"540105e9-ba05-40f3-bdfd-16fb645e978c","interviews","Getting hired","Applications, interviews, offers, and the negotiation nobody rehearses.",{"id":187,"slug":67,"name":188,"parentId":48,"description":48,"articleCount":101},"019fe637-3e06-75b8-8a2d-040994c0d907","TypeScript",{"id":190,"slug":191,"name":192,"parentId":48,"description":48,"articleCount":19},"019fe637-3e06-75b8-8a2d-0956229cd176","architecture","Architecture",{"id":194,"slug":195,"name":196,"parentId":48,"description":197,"articleCount":19},"0cc5bdbb-d6e8-43b0-9cb4-d227aec6aa68","people","The people around you","Colleagues, managers, and the relationships that decide how work feels.",{"id":199,"slug":200,"name":201,"parentId":48,"description":202,"articleCount":19},"545c6bda-b8cf-4905-8056-18c0c4dc7a64","leading","Leading","Becoming the person others rely on, before and after the title.",{"id":204,"slug":75,"name":76,"parentId":48,"description":48,"articleCount":19},"019fe637-3e07-735d-8227-4c34039af2e0",{"id":206,"slug":207,"name":208,"parentId":48,"description":209,"articleCount":19},"cc22e84d-2cac-44ac-a272-5715e4710dc4","company","Company shapes","Why the same behaviour succeeds at five people and fails at five thousand.",{"id":211,"slug":115,"name":212,"parentId":48,"description":48,"articleCount":171},"019fe65f-98ec-773a-8ca8-9a2e971911c1","AI",{"id":214,"slug":59,"name":215,"parentId":48,"description":48,"articleCount":216},"019fe65f-c110-761b-931e-99a2d1280410","CSS",31,{"id":218,"slug":154,"name":155,"parentId":48,"description":48,"articleCount":19},"01a037b3-d685-76cb-9940-6a3f8ce140a0",{"id":220,"slug":221,"name":222,"parentId":48,"description":48,"articleCount":171},"019fe65f-a1cb-74c8-b999-ff353158fce9","designsystems","Design Systems",{"id":224,"slug":130,"name":131,"parentId":48,"description":48,"articleCount":31},"019ff280-9a51-757c-84ce-c941f20371e9",{"id":226,"slug":90,"name":227,"parentId":48,"description":48,"articleCount":31},"019ff19b-f37e-7091-b3cd-5c99e8c005a4","HTML",{"id":229,"slug":51,"name":230,"parentId":48,"description":48,"articleCount":231},"019fe65f-b950-7762-bb1a-d83445281950","JavaScript",52,{"id":233,"slug":99,"name":100,"parentId":48,"description":48,"articleCount":101},"01a03cdb-1ff8-76fa-9fa7-38d9e4eba1e1",{"id":235,"slug":112,"name":113,"parentId":48,"description":48,"articleCount":43},"01a0499d-b263-749a-a3ad-df3cc782e94d",{"id":237,"slug":71,"name":72,"parentId":48,"description":48,"articleCount":238},"019fe65f-b134-725b-bbc7-3e3db8c68675",5,{"id":240,"slug":118,"name":119,"parentId":48,"description":48,"articleCount":31},"019fe660-ce9d-754e-b241-7bccad915b86",{"id":242,"slug":136,"name":137,"parentId":48,"description":48,"articleCount":31},"019ff280-9d5a-77dc-b01d-e2378eaf86cb",{"id":244,"slug":148,"name":149,"parentId":48,"description":48,"articleCount":31},"019ff280-9eea-736d-ad13-4c01f0ddc46e",[246,247,248,249,250,251,252,253,254,255,256,257],{"slug":46,"name":47,"articles":49},{"slug":51,"name":52,"articles":53},{"slug":55,"name":56,"articles":57},{"slug":59,"name":60,"articles":61},{"slug":63,"name":64,"articles":65},{"slug":67,"name":68,"articles":69},{"slug":71,"name":72,"articles":73},{"slug":75,"name":76,"articles":77},{"slug":83,"name":84,"articles":81},{"slug":79,"name":80,"articles":81},{"slug":90,"name":91,"articles":88},{"slug":93,"name":94,"articles":88},{"items":259,"meta":483},[260,283,301,319,337,355,373,391,409,427,445,465],{"id":261,"slug":262,"title":263,"subtitle":48,"excerpt":264,"coverUrl":265,"locale":13,"readingMinutes":266,"publishedAt":267,"viewCount":268,"likeCount":19,"commentCount":171,"author":269,"vertical":274,"topic":275,"tags":276,"_count":281,"playground":282,"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",14,"2026-08-24T13:57:38.080Z",623,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},"019fe637-3c25-7088-9034-39c9f15dc3c8","Parsa Jiravand","parsa","Frontend engineer · building bestpractic",{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":151,"name":152},[277,278,279,280],{"slug":151,"name":152,"color":48},{"slug":51,"name":52,"color":48},{"slug":63,"name":64,"color":48},{"slug":46,"name":47,"color":48},{"assessments":171},{"slug":262},{"id":284,"slug":285,"title":286,"subtitle":48,"excerpt":287,"coverUrl":288,"locale":13,"readingMinutes":69,"publishedAt":289,"viewCount":290,"likeCount":19,"commentCount":19,"author":291,"vertical":292,"topic":293,"tags":294,"_count":299,"playground":300,"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","2026-08-24T07:06:37.948Z",483,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":230},[295,296,297,298],{"slug":51,"name":52,"color":48},{"slug":46,"name":47,"color":48},{"slug":63,"name":64,"color":48},{"slug":86,"name":87,"color":48},{"assessments":171},{"slug":285},{"id":302,"slug":303,"title":304,"subtitle":48,"excerpt":305,"coverUrl":306,"locale":13,"readingMinutes":238,"publishedAt":307,"viewCount":308,"likeCount":19,"commentCount":19,"author":309,"vertical":310,"topic":311,"tags":312,"_count":317,"playground":318,"hasQuiz":17,"hasPlayground":17},"01a018ca-59cf-75a0-b0c2-ba8ca95ade59","css-where-is-specificity-control","The CSS Selector Built to Lose Every Fight","You keep reaching for !important to override a component's styles. There's a selector that fixes this by contributing zero specificity, on purpose.","\u002Fmedia\u002Fcovers\u002Fcss-where-is-specificity-control.png","2026-08-24T07:06:37.051Z",401,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":59,"name":215},[313,314,315,316],{"slug":59,"name":60,"color":48},{"slug":46,"name":47,"color":48},{"slug":55,"name":56,"color":48},{"slug":86,"name":87,"color":48},{"assessments":171},{"slug":303},{"id":320,"slug":321,"title":322,"subtitle":48,"excerpt":323,"coverUrl":324,"locale":13,"readingMinutes":238,"publishedAt":325,"viewCount":326,"likeCount":19,"commentCount":19,"author":327,"vertical":328,"topic":329,"tags":330,"_count":335,"playground":336,"hasQuiz":17,"hasPlayground":17},"01a013a2-ff42-738e-b6d0-cda8f338a976","import-maps-bare-specifiers-native-modules","One version bump, 40 files to edit. Import maps fix that.","Bare specifiers like import _ from 'lodash' don't work in a browser without a bundler — unless you tell the browser how to resolve them yourself, in one JSON block instead of forty hardcoded URLs.","\u002Fmedia\u002Fcovers\u002Fimport-maps-bare-specifiers-native-modules.png","2026-08-23T06:48:56.911Z",339,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":230},[331,332,333,334],{"slug":51,"name":52,"color":48},{"slug":46,"name":47,"color":48},{"slug":55,"name":56,"color":48},{"slug":83,"name":84,"color":48},{"assessments":171},{"slug":321},{"id":338,"slug":339,"title":340,"subtitle":48,"excerpt":341,"coverUrl":342,"locale":13,"readingMinutes":101,"publishedAt":343,"viewCount":344,"likeCount":19,"commentCount":19,"author":345,"vertical":346,"topic":347,"tags":348,"_count":353,"playground":354,"hasQuiz":17,"hasPlayground":17},"019ff19b-fbc7-7069-b3ba-28ffd8fbf4d3","navigator-sendbeacon-reliable-analytics","Your fetch in beforeunload is silently killed. navigator.sendBeacon guarantees delivery.","When the page unloads, the browser may cancel any in-flight fetch or XHR before it completes. navigator.sendBeacon sends a POST the browser commits to delivering, even after the document is gone.","\u002Fmedia\u002Fcovers\u002Fnavigator-sendbeacon-reliable-analytics.png","2026-08-22T06:47:21.180Z",534,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":230},[349,350,351,352],{"slug":51,"name":52,"color":48},{"slug":46,"name":47,"color":48},{"slug":55,"name":56,"color":48},{"slug":75,"name":76,"color":48},{"assessments":171},{"slug":339},{"id":356,"slug":357,"title":358,"subtitle":48,"excerpt":359,"coverUrl":360,"locale":13,"readingMinutes":238,"publishedAt":361,"viewCount":362,"likeCount":19,"commentCount":19,"author":363,"vertical":364,"topic":365,"tags":366,"_count":371,"playground":372,"hasQuiz":17,"hasPlayground":17},"01a00e88-aad0-7555-be95-4e472b212b9b","inert-attribute-disable-interaction","The Modal Was Open. So Was Everything Behind It.","A keyboard-only pass found a background button still worked while a modal was open — aria-hidden had hidden it from screen readers but never touched focus or clicks. One boolean attribute, inert, closes that gap in a single line.","\u002Fmedia\u002Fcovers\u002Finert-attribute-disable-interaction.png","2026-08-21T06:54:17.247Z",299,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":90,"name":227},[367,368,369,370],{"slug":90,"name":91,"color":48},{"slug":96,"name":97,"color":48},{"slug":46,"name":47,"color":48},{"slug":55,"name":56,"color":48},{"assessments":171},{"slug":357},{"id":374,"slug":375,"title":376,"subtitle":48,"excerpt":377,"coverUrl":378,"locale":13,"readingMinutes":88,"publishedAt":379,"viewCount":380,"likeCount":19,"commentCount":19,"author":381,"vertical":382,"topic":383,"tags":384,"_count":389,"playground":390,"hasQuiz":17,"hasPlayground":17},"01a00952-9d58-7601-89ac-42fc7bf00fc9","urlpattern-native-route-matching","Stop Writing Regex to Match URLs — The Browser Already Can","A service worker's route regex was missing one anchor and started caching live edit forms as if they were read-only pages. URLPattern, native since 2021, doesn't let you make that mistake.","\u002Fmedia\u002Fcovers\u002Furlpattern-native-route-matching.png","2026-08-20T06:53:07.359Z",381,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":230},[385,386,387,388],{"slug":51,"name":52,"color":48},{"slug":46,"name":47,"color":48},{"slug":83,"name":84,"color":48},{"slug":55,"name":56,"color":48},{"assessments":171},{"slug":375},{"id":392,"slug":393,"title":394,"subtitle":48,"excerpt":395,"coverUrl":396,"locale":13,"readingMinutes":101,"publishedAt":397,"viewCount":398,"likeCount":19,"commentCount":19,"author":399,"vertical":400,"topic":401,"tags":402,"_count":407,"playground":408,"hasQuiz":17,"hasPlayground":17},"01a0042a-852e-7338-83ed-a1f581d6c501","css-clamp-fluid-typography","Stop Writing Media Queries for Font Size","A design system audit found five breakpoints for one heading. clamp() replaces all of them with one line that never jumps.","\u002Fmedia\u002Fcovers\u002Fcss-clamp-fluid-typography.png","2026-08-19T06:51:54.290Z",365,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":59,"name":215},[403,404,405,406],{"slug":59,"name":60,"color":48},{"slug":46,"name":47,"color":48},{"slug":55,"name":56,"color":48},{"slug":96,"name":97,"color":48},{"assessments":171},{"slug":393},{"id":410,"slug":411,"title":412,"subtitle":48,"excerpt":413,"coverUrl":414,"locale":13,"readingMinutes":101,"publishedAt":415,"viewCount":416,"likeCount":19,"commentCount":19,"author":417,"vertical":418,"topic":419,"tags":420,"_count":425,"playground":426,"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",566,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":59,"name":215},[421,422,423,424],{"slug":59,"name":60,"color":48},{"slug":46,"name":47,"color":48},{"slug":55,"name":56,"color":48},{"slug":63,"name":64,"color":48},{"assessments":171},{"slug":411},{"id":428,"slug":429,"title":430,"subtitle":48,"excerpt":431,"coverUrl":432,"locale":13,"readingMinutes":101,"publishedAt":433,"viewCount":434,"likeCount":19,"commentCount":19,"author":435,"vertical":436,"topic":437,"tags":438,"_count":443,"playground":444,"hasQuiz":17,"hasPlayground":17},"019ffa10-eeed-707d-9b50-7d83664c7a9a","css-trigonometric-functions-radial-layout","Stop Writing Math.cos() in a Resize Listener","CSS learned trigonometry. Here's the radial menu that used to need a resize listener — and doesn't anymore.","\u002Fmedia\u002Fcovers\u002Fcss-trigonometric-functions-radial-layout.png","2026-08-17T07:03:57.776Z",550,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":59,"name":215},[439,440,441,442],{"slug":59,"name":60,"color":48},{"slug":46,"name":47,"color":48},{"slug":51,"name":52,"color":48},{"slug":55,"name":56,"color":48},{"assessments":171},{"slug":429},{"id":446,"slug":447,"title":448,"subtitle":48,"excerpt":449,"coverUrl":450,"locale":13,"readingMinutes":88,"publishedAt":451,"viewCount":452,"likeCount":19,"commentCount":19,"author":453,"vertical":454,"topic":455,"tags":456,"_count":463,"playground":464,"hasQuiz":17,"hasPlayground":17},"019ff73a-ed77-732e-a13f-8be6d6939332","calc-size-animate-to-auto","I Can Finally Delete My max-height: 9999px Animation Hack","CSS transitions have never been able to animate to height: auto, because auto isn't a number the engine can interpolate. calc-size() and interpolate-size finally give it real numbers — no JavaScript, no magic-number ceiling.","\u002Fmedia\u002Fcovers\u002Fcalc-size-animate-to-auto.png","2026-08-16T06:46:49.217Z",570,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":59,"name":215},[457,458,459,460],{"slug":59,"name":60,"color":48},{"slug":46,"name":47,"color":48},{"slug":55,"name":56,"color":48},{"slug":461,"name":462,"color":48},"animation","Animation",{"assessments":171},{"slug":447},{"id":466,"slug":467,"title":468,"subtitle":48,"excerpt":469,"coverUrl":470,"locale":13,"readingMinutes":238,"publishedAt":471,"viewCount":472,"likeCount":19,"commentCount":19,"author":473,"vertical":474,"topic":475,"tags":476,"_count":481,"playground":482,"hasQuiz":17,"hasPlayground":17},"019ff19b-f9ca-772e-8f09-cd3d3c640d2b","web-locks-api-tab-coordination","Five tabs open, one refresh token — the race nobody noticed","Users with multiple tabs open triggered a silent race: every tab refreshed the same expiring auth token at once, and the server started invalidating its own sessions. navigator.locks fixes it with a real mutex, no polling or localStorage hacks required.","\u002Fmedia\u002Fcovers\u002Fweb-locks-api-tab-coordination.png","2026-08-15T06:44:54.917Z",995,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":230},[477,478,479,480],{"slug":51,"name":52,"color":48},{"slug":46,"name":47,"color":48},{"slug":55,"name":56,"color":48},{"slug":121,"name":122,"color":48},{"assessments":171},{"slug":467},{"page":238,"perPage":77,"total":484,"totalPages":485},119,10,{"items":487,"meta":506},[488],{"id":489,"slug":490,"title":491,"subtitle":48,"excerpt":492,"coverUrl":493,"locale":13,"readingMinutes":266,"publishedAt":494,"viewCount":495,"likeCount":19,"commentCount":19,"author":496,"vertical":497,"topic":498,"tags":499,"_count":504,"playground":505,"hasQuiz":17,"hasPlayground":17},"01a0ab57-dda2-74dd-816b-a0ef7f77aeb3","react-weekly-derived-state-bug","React Derived State: Why That useState Is Probably a Bug","React derived state explained: why syncing a computed value into useState with an Effect causes extra renders and drift, and what to write instead.","\u002Fmedia\u002Fcovers\u002Freact-weekly-derived-state-bug.png","2026-09-20T16:27:07.271Z",86,{"id":270,"name":271,"username":272,"avatarUrl":48,"headline":273},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":71,"name":72},[500,501,502,503],{"slug":71,"name":72,"color":48},{"slug":51,"name":52,"color":48},{"slug":63,"name":64,"color":48},{"slug":46,"name":47,"color":48},{"assessments":171},{"slug":490},{"page":171,"perPage":171,"total":484,"totalPages":484}]