[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"verticals":3,"blog-topics":44,"topics-all":166,"search-suggestions":246,"articles-all-4---":259,"articles-total":487},[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,96,99,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145,148,151,154,157,160,163],{"slug":46,"name":47,"color":48,"articles":49},"webdev","Webdev",null,107,{"slug":51,"name":52,"color":48,"articles":53},"javascript","Javascript",89,{"slug":55,"name":56,"color":48,"articles":57},"frontend","Frontend",72,{"slug":59,"name":60,"color":48,"articles":61},"css","Css",36,{"slug":63,"name":64,"color":48,"articles":65},"tutorial","Tutorial",35,{"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},"html","Html",7,{"slug":90,"name":91,"color":48,"articles":88},"accessibility","Accessibility",{"slug":93,"name":94,"color":48,"articles":95},"programming","Programming",6,{"slug":97,"name":98,"color":48,"articles":95},"grammar","Grammar",{"slug":100,"name":101,"color":48,"articles":102},"nestjs","Nestjs",4,{"slug":104,"name":105,"color":48,"articles":102},"nextjs","Nextjs",{"slug":107,"name":108,"color":48,"articles":102},"apis","Apis",{"slug":110,"name":111,"color":48,"articles":43},"nuxt","Nuxt",{"slug":113,"name":114,"color":48,"articles":43},"ssr","SSR",{"slug":116,"name":117,"color":48,"articles":43},"ai","Ai",{"slug":119,"name":120,"color":48,"articles":43},"vue","Vue",{"slug":122,"name":123,"color":48,"articles":31},"security","Security",{"slug":125,"name":126,"color":48,"articles":31},"async","Async",{"slug":128,"name":129,"color":48,"articles":31},"forms","Forms",{"slug":131,"name":132,"color":48,"articles":31},"api","API",{"slug":134,"name":135,"color":48,"articles":31},"english","English",{"slug":137,"name":138,"color":48,"articles":31},"verbs","Verbs",{"slug":140,"name":141,"color":48,"articles":31},"spanish","Spanish",{"slug":143,"name":144,"color":48,"articles":31},"a1","A1",{"slug":146,"name":147,"color":48,"articles":31},"a2","A2",{"slug":149,"name":150,"color":48,"articles":31},"tenses","Tenses",{"slug":152,"name":153,"color":48,"articles":31},"turkish","Turkish",{"slug":155,"name":156,"color":48,"articles":31},"career","Career",{"slug":158,"name":159,"color":48,"articles":31},"beginners","Beginners",{"slug":161,"name":162,"color":48,"articles":31},"productivity","Productivity",{"slug":164,"name":165,"color":48,"articles":31},"discuss","Discuss",[167,173,175,180,182,187,190,194,199,204,206,211,214,218,220,224,226,229,233,235,237,240,242,244],{"id":168,"slug":169,"name":170,"parentId":48,"description":171,"articleCount":172},"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":174,"slug":119,"name":120,"parentId":48,"description":48,"articleCount":43},"019fe637-3e06-75b8-8a2c-fc350aad7701",{"id":176,"slug":177,"name":178,"parentId":48,"description":179,"articleCount":172},"9ef7e6f6-b287-4ac2-8f56-421d3aafe8cc","meetings","Meetings and rooms","Speaking up, running one, and knowing which kind you are in.",{"id":181,"slug":110,"name":111,"parentId":48,"description":48,"articleCount":43},"019fe637-3e06-75b8-8a2d-0309c35755c6",{"id":183,"slug":184,"name":185,"parentId":48,"description":186,"articleCount":19},"540105e9-ba05-40f3-bdfd-16fb645e978c","interviews","Getting hired","Applications, interviews, offers, and the negotiation nobody rehearses.",{"id":188,"slug":67,"name":189,"parentId":48,"description":48,"articleCount":102},"019fe637-3e06-75b8-8a2d-040994c0d907","TypeScript",{"id":191,"slug":192,"name":193,"parentId":48,"description":48,"articleCount":19},"019fe637-3e06-75b8-8a2d-0956229cd176","architecture","Architecture",{"id":195,"slug":196,"name":197,"parentId":48,"description":198,"articleCount":19},"0cc5bdbb-d6e8-43b0-9cb4-d227aec6aa68","people","The people around you","Colleagues, managers, and the relationships that decide how work feels.",{"id":200,"slug":201,"name":202,"parentId":48,"description":203,"articleCount":19},"545c6bda-b8cf-4905-8056-18c0c4dc7a64","leading","Leading","Becoming the person others rely on, before and after the title.",{"id":205,"slug":75,"name":76,"parentId":48,"description":48,"articleCount":19},"019fe637-3e07-735d-8227-4c34039af2e0",{"id":207,"slug":208,"name":209,"parentId":48,"description":210,"articleCount":19},"cc22e84d-2cac-44ac-a272-5715e4710dc4","company","Company shapes","Why the same behaviour succeeds at five people and fails at five thousand.",{"id":212,"slug":116,"name":213,"parentId":48,"description":48,"articleCount":172},"019fe65f-98ec-773a-8ca8-9a2e971911c1","AI",{"id":215,"slug":59,"name":216,"parentId":48,"description":48,"articleCount":217},"019fe65f-c110-761b-931e-99a2d1280410","CSS",33,{"id":219,"slug":155,"name":156,"parentId":48,"description":48,"articleCount":19},"01a037b3-d685-76cb-9940-6a3f8ce140a0",{"id":221,"slug":222,"name":223,"parentId":48,"description":48,"articleCount":172},"019fe65f-a1cb-74c8-b999-ff353158fce9","designsystems","Design Systems",{"id":225,"slug":134,"name":135,"parentId":48,"description":48,"articleCount":31},"019ff280-9a51-757c-84ce-c941f20371e9",{"id":227,"slug":86,"name":228,"parentId":48,"description":48,"articleCount":31},"019ff19b-f37e-7091-b3cd-5c99e8c005a4","HTML",{"id":230,"slug":51,"name":231,"parentId":48,"description":48,"articleCount":232},"019fe65f-b950-7762-bb1a-d83445281950","JavaScript",52,{"id":234,"slug":100,"name":101,"parentId":48,"description":48,"articleCount":102},"01a03cdb-1ff8-76fa-9fa7-38d9e4eba1e1",{"id":236,"slug":104,"name":105,"parentId":48,"description":48,"articleCount":102},"01a0499d-b263-749a-a3ad-df3cc782e94d",{"id":238,"slug":71,"name":72,"parentId":48,"description":48,"articleCount":239},"019fe65f-b134-725b-bbc7-3e3db8c68675",5,{"id":241,"slug":122,"name":123,"parentId":48,"description":48,"articleCount":31},"019fe660-ce9d-754e-b241-7bccad915b86",{"id":243,"slug":140,"name":141,"parentId":48,"description":48,"articleCount":31},"019ff280-9d5a-77dc-b01d-e2378eaf86cb",{"id":245,"slug":152,"name":153,"parentId":48,"description":48,"articleCount":31},"019ff280-9eea-736d-ad13-4c01f0ddc46e",[247,248,249,250,251,252,253,254,255,256,257,258],{"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":86,"name":87,"articles":88},{"slug":90,"name":91,"articles":88},{"items":260,"meta":484},[261,284,302,320,338,356,374,394,412,430,448,466],{"id":262,"slug":263,"title":264,"subtitle":48,"excerpt":265,"coverUrl":266,"locale":13,"readingMinutes":267,"publishedAt":268,"viewCount":269,"likeCount":19,"commentCount":19,"author":270,"vertical":275,"topic":276,"tags":277,"_count":282,"playground":283,"hasQuiz":17,"hasPlayground":17},"01a0499d-b520-778f-8286-8221ec03b8b5","nextjs-weekly-cache-components-explained","Next.js Cache Components Explained (with Cheat Sheet)","How Next.js Cache Components decide what's static, what's cached, and what streams — the use cache directive, cacheLife, and Suspense explained.","\u002Fmedia\u002Fcovers\u002Fnextjs-weekly-cache-components-explained.png",14,"2026-09-01T11:24:15.087Z",377,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},"019fe637-3c25-7088-9034-39c9f15dc3c8","Parsa Jiravand","parsa","Frontend engineer · building bestpractic",{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":104,"name":105},[278,279,280,281],{"slug":104,"name":105,"color":48},{"slug":71,"name":72,"color":48},{"slug":46,"name":47,"color":48},{"slug":63,"name":64,"color":48},{"assessments":172},{"slug":263},{"id":285,"slug":286,"title":287,"subtitle":48,"excerpt":288,"coverUrl":289,"locale":13,"readingMinutes":239,"publishedAt":290,"viewCount":291,"likeCount":19,"commentCount":19,"author":292,"vertical":293,"topic":294,"tags":295,"_count":300,"playground":301,"hasQuiz":17,"hasPlayground":17},"01a04446-4fc4-73e1-b763-eda8c9cf631f","navigation-api-intercept-navigation","Your Router Doesn't Intercept Navigation. It Reacts To It.","Double-click a link during a slow route change and most SPA routers render two pages and settle on the wrong one — because they're listening for navigation after it already happened. The Navigation API lets you stop it before it starts.","\u002Fmedia\u002Fcovers\u002Fnavigation-api-intercept-navigation.png","2026-09-01T11:23:43.875Z",703,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":231},[296,297,298,299],{"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":172},{"slug":286},{"id":303,"slug":304,"title":305,"subtitle":48,"excerpt":306,"coverUrl":307,"locale":13,"readingMinutes":267,"publishedAt":308,"viewCount":309,"likeCount":19,"commentCount":19,"author":310,"vertical":311,"topic":312,"tags":313,"_count":318,"playground":319,"hasQuiz":17,"hasPlayground":17},"019ff73a-fb5b-73ce-b725-2912167a7dde","weekly-debounce-and-throttle","Debounce and Throttle in JavaScript: The Complete Guide","Learn debounce and throttle in JavaScript step by step, with worked examples, edge cases, and a copy-paste cheat sheet for search, scroll, and resize.","\u002Fmedia\u002Fcovers\u002Fweekly-debounce-and-throttle.png","2026-08-31T13:12:14.139Z",354,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":231},[314,315,316,317],{"slug":51,"name":52,"color":48},{"slug":46,"name":47,"color":48},{"slug":63,"name":64,"color":48},{"slug":75,"name":76,"color":48},{"assessments":172},{"slug":304},{"id":321,"slug":322,"title":323,"subtitle":48,"excerpt":324,"coverUrl":325,"locale":13,"readingMinutes":95,"publishedAt":326,"viewCount":327,"likeCount":19,"commentCount":19,"author":328,"vertical":329,"topic":330,"tags":331,"_count":336,"playground":337,"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","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",281,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":231},[332,333,334,335],{"slug":51,"name":52,"color":48},{"slug":46,"name":47,"color":48},{"slug":63,"name":64,"color":48},{"slug":107,"name":108,"color":48},{"assessments":172},{"slug":322},{"id":339,"slug":340,"title":341,"subtitle":48,"excerpt":342,"coverUrl":343,"locale":13,"readingMinutes":267,"publishedAt":344,"viewCount":345,"likeCount":19,"commentCount":19,"author":346,"vertical":347,"topic":348,"tags":349,"_count":354,"playground":355,"hasQuiz":17,"hasPlayground":17},"01a04446-3f08-701c-8cdc-e5ab5e87086e","nuxt-weekly-cross-request-state-leak","Nuxt useState vs ref(): Why Server State Leaks Across Users","A module-scope ref() in Nuxt is shared by every request that hits your server. Learn why useState isolates state per user, and how to fix the leak.","\u002Fmedia\u002Fcovers\u002Fnuxt-weekly-cross-request-state-leak.png","2026-08-30T11:37:11.335Z",270,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":110,"name":111},[350,351,352,353],{"slug":110,"name":111,"color":48},{"slug":113,"name":114,"color":48},{"slug":51,"name":52,"color":48},{"slug":63,"name":64,"color":48},{"assessments":172},{"slug":340},{"id":357,"slug":358,"title":359,"subtitle":48,"excerpt":360,"coverUrl":361,"locale":13,"readingMinutes":95,"publishedAt":362,"viewCount":363,"likeCount":19,"commentCount":19,"author":364,"vertical":365,"topic":366,"tags":367,"_count":372,"playground":373,"hasQuiz":17,"hasPlayground":17},"01a037b3-f71a-755b-9820-9f2489daaebd","css-aspect-ratio-replace-padding-hack","Delete Your padding-bottom Aspect-Ratio Hack","For a decade the only way to keep a responsive box's shape was a padding percentage and an absolutely positioned wrapper. One CSS property replaces it — with one gotcha on real images nobody warns you about.","\u002Fmedia\u002Fcovers\u002Fcss-aspect-ratio-replace-padding-hack.png","2026-08-30T11:36:40.014Z",343,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":59,"name":216},[368,369,370,371],{"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":172},{"slug":358},{"id":375,"slug":376,"title":377,"subtitle":378,"excerpt":379,"coverUrl":380,"locale":13,"readingMinutes":381,"publishedAt":382,"viewCount":383,"likeCount":19,"commentCount":19,"author":384,"vertical":385,"topic":48,"tags":386,"_count":393,"playground":48,"hasQuiz":18,"hasPlayground":18},"01a05242-45d4-724a-b453-6b7432196185","react-multi-step-form-the-complete-guide-with-cheat-sheet","React Multi-Step Form: The Complete Guide (with Cheat Sheet)","You already know how to fix that. You also know that the moment the step index stops living in `useState`, the browser back button, the per-step validation, and the focus ring all become your problem too.","Build a React multi-step form that validates per step, survives a refresh, and stays accessible — the mental model, the traps, and a copy-paste cheat sheet.","\u002Fmedia\u002Fcovers\u002Freact-form-wizard-component-v2.png",20,"2026-08-30T10:41:23.244Z",184,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},[387,388,389,391],{"slug":55,"name":56,"color":48},{"slug":71,"name":72,"color":48},{"slug":390,"name":390,"color":48},"next",{"slug":392,"name":392,"color":48},"package",{"assessments":19},{"id":395,"slug":396,"title":397,"subtitle":48,"excerpt":398,"coverUrl":399,"locale":13,"readingMinutes":73,"publishedAt":400,"viewCount":401,"likeCount":19,"commentCount":19,"author":402,"vertical":403,"topic":404,"tags":405,"_count":410,"playground":411,"hasQuiz":17,"hasPlayground":17},"01a04446-373a-775b-8aaf-b72c8952123d","react-weekly-rerender-vs-remount","React Re-render vs Remount: What Actually Triggers Each","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","2026-08-29T12:32:41.200Z",386,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":71,"name":72},[406,407,408,409],{"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":172},{"slug":396},{"id":413,"slug":414,"title":415,"subtitle":48,"excerpt":416,"coverUrl":417,"locale":13,"readingMinutes":102,"publishedAt":418,"viewCount":419,"likeCount":19,"commentCount":19,"author":420,"vertical":421,"topic":422,"tags":423,"_count":428,"playground":429,"hasQuiz":17,"hasPlayground":17},"01a03297-a2d3-7318-bffe-5edb58824c5d","css-focus-visible-keyboard-focus-rings","The outline: none Debate Has Been Over Since 2020","A designer flags the ugly blue focus ring in review. An engineer deletes it with outline: none. Nobody notices the keyboard-only user who now can't tell where they are on the page.","\u002Fmedia\u002Fcovers\u002Fcss-focus-visible-keyboard-focus-rings.png","2026-08-29T12:32:09.792Z",333,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":59,"name":216},[424,425,426,427],{"slug":59,"name":60,"color":48},{"slug":90,"name":91,"color":48},{"slug":46,"name":47,"color":48},{"slug":55,"name":56,"color":48},{"assessments":172},{"slug":414},{"id":431,"slug":432,"title":433,"subtitle":48,"excerpt":434,"coverUrl":435,"locale":13,"readingMinutes":73,"publishedAt":436,"viewCount":437,"likeCount":19,"commentCount":19,"author":438,"vertical":439,"topic":440,"tags":441,"_count":446,"playground":447,"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",400,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":100,"name":101},[442,443,444,445],{"slug":100,"name":101,"color":48},{"slug":79,"name":80,"color":48},{"slug":67,"name":68,"color":48},{"slug":63,"name":64,"color":48},{"assessments":172},{"slug":432},{"id":449,"slug":450,"title":451,"subtitle":48,"excerpt":452,"coverUrl":453,"locale":13,"readingMinutes":239,"publishedAt":454,"viewCount":455,"likeCount":19,"commentCount":19,"author":456,"vertical":457,"topic":458,"tags":459,"_count":464,"playground":465,"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","2026-08-28T17:00:06.666Z",476,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":59,"name":216},[460,461,462,463],{"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":172},{"slug":450},{"id":467,"slug":468,"title":469,"subtitle":48,"excerpt":470,"coverUrl":471,"locale":13,"readingMinutes":239,"publishedAt":472,"viewCount":473,"likeCount":19,"commentCount":19,"author":474,"vertical":475,"topic":476,"tags":477,"_count":482,"playground":483,"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",688,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":51,"name":231},[478,479,480,481],{"slug":51,"name":52,"color":48},{"slug":46,"name":47,"color":48},{"slug":55,"name":56,"color":48},{"slug":63,"name":64,"color":48},{"assessments":172},{"slug":468},{"page":102,"perPage":77,"total":485,"totalPages":486},123,11,{"items":488,"meta":507},[489],{"id":490,"slug":491,"title":492,"subtitle":48,"excerpt":493,"coverUrl":494,"locale":13,"readingMinutes":73,"publishedAt":495,"viewCount":496,"likeCount":19,"commentCount":19,"author":497,"vertical":498,"topic":499,"tags":500,"_count":505,"playground":506,"hasQuiz":17,"hasPlayground":17},"01a066ea-3098-75c9-b7e5-1d5426f773eb","vue-weekly-composables-shared-state-trap","Vue Composables: The Shared State Trap (+ Cheat Sheet)","Why two Vue components using the same composable can end up sharing state by accident, the mental model that explains it, and how to fix or embrace it.","\u002Fmedia\u002Fcovers\u002Fvue-weekly-composables-shared-state-trap.png","2026-09-22T19:37:11.460Z",145,{"id":271,"name":272,"username":273,"avatarUrl":48,"headline":274},{"slug":6,"name":7,"accentFrom":10,"accentTo":11},{"slug":119,"name":120},[501,502,503,504],{"slug":119,"name":120,"color":48},{"slug":51,"name":52,"color":48},{"slug":63,"name":64,"color":48},{"slug":46,"name":47,"color":48},{"assessments":172},{"slug":491},{"page":172,"perPage":172,"total":485,"totalPages":485}]