[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"contentNavigation":3,"topic-scalability":4,"newsletter-stats":9,"articles-feed-\u002Ftopics\u002Fscalability-1-scalability-":11,"$fQa3xUpnRDPNiFFu2QS4K-DAjYmsapeR9fNhPNBdpkOc":-1,"home-tags":44},[],{"articleCount":5,"color":6,"id":7,"name":8,"slug":8},1,"#10b981","019e265b-f571-7677-a537-2f7e96a490bf","scalability",{"confirmedCount":10},409,{"items":12,"page":5,"pageSize":43,"totalCount":5},[13],{"content":14,"createdAt":15,"id":16,"image":17,"isAffiliate":18,"isPublished":18,"publishedAt":19,"slug":20,"sourceId":21,"sourceName":22,"sourceType":23,"summary":24,"title":25,"updatedAt":26,"url":27,"urlHash":28,"tags":29},"This entry is part 1 of 2 in the series Vue Component DesignGuess what!? We’ve just published a new course all about component design patterns in Vue.js. It’s sure to improve your Vue codebase with battle-tested patterns for scalability and maintainability. We created the course primarily for beginners to help them up their component development skills, but even more learned Vue devs might find a new pattern or two. Go checkout the course now or keep reading for an overview of some of the patterns discussed in the videos. 1. The Branching Component Design Pattern Extract complex conditional rendering into separate components. Instead of multiple v-if branches in one component, create dedicated components for each state. The resulting code is easier to read and maintain over time. &lt;!-- Before --&gt; &lt;template&gt; &lt;div&gt; &lt;div v-if=&quot;loading&quot;&gt;Loading...&lt;\u002Fdiv&gt; &lt;div v-else-if=&quot;error&quot;&gt;Error: {{ error }}&lt;\u002Fdiv&gt; &lt;div v-else&gt; &lt;!-- Complex content --&gt; &lt;\u002Fdiv&gt; &lt;\u002Fdiv&gt; &lt;\u002Ftemplate&gt; &lt;!-- After --&gt; &lt;template&gt; &lt;div&gt; &lt;LoadingState v-if=&quot;loading&quot; \u002F&gt; &lt;ErrorState v-else-if=&quot;error&quot; :message=&quot;error&quot; \u002F&gt; &lt;ContentState v-else :data=&quot;data&quot; \u002F&gt; &lt;\u002Fdiv&gt; &lt;\u002Ftemplate&gt; 2. Slots and Template Props Design Pattern Whenever you have a prop that gets passed directly to the template, that’s a good sign you should be using a slot instead. Why? They serve the same purpose, but the slot allows more flexibility. &lt;!-- AppButton.vue --&gt; &lt;!--Before--&gt; &lt;script setup&gt; defineProps({ label: { type: String, default: &quot;Click Me&quot; } }) &lt;\u002Fscript&gt; &lt;template&gt; &lt;button class=&quot;btn&quot;&gt; &lt;!-- the label makes a beeline to the template and makes no stops along the way--&gt; {{ label }} &lt;\u002Fbutton&gt; &lt;\u002Ftemplate&gt; &lt;!--After--&gt; &lt;template&gt; &lt;button class=&quot;btn&quot;&gt; &lt;!-- ahh, that&#039;s better now we can pass in markup, icons, components whatever--&gt; &lt;slot&gt;&lt;\u002Fslot&gt; &lt;\u002Fbutton&gt; &lt;\u002Ftemplate&gt; Thanks Michael Thiessen for this wonderful pattern and a memorable name to boot! 3. List with ListItem Component Pattern Separate list logic and item display into distinct components. This allows for bundling up list empty state, content, controls, and more into a contained List component. Extracting each item in the list to it’s own ListItem component, makes the List component easy to read, and provides more focus when developing and styling each item. &lt;!-- UsersList.vue --&gt; &lt;script setup&gt; const props = defineProps({ users: { type: Array, required: true } }); const filter = ref(&quot;&quot;) const filteredUsers = computed(()=&gt;{ \u002F\u002F filter logic here }) &lt;\u002Fscript&gt; &lt;template&gt; &lt;div&gt; &lt;!-- List Controls --&gt; &lt;UserFilters v-model=&quot;filter&quot; \u002F&gt; &lt;!-- List Content --&gt; &lt;ul v-if=&quot;filteredUsers.length&quot;&gt; &lt;!-- items extracted to their own component (see below) --&gt; &lt;UserListItem v-for=&quot;user in filteredUsers&quot; :key=&quot;user.id&quot; :user=&quot;user&quot; \u002F&gt; &lt;\u002Ful&gt; &lt;!-- Empty State--&gt; &lt;EmptyState v-else message=&quot;No users found&quot; \u002F&gt; &lt;\u002Fdiv&gt; &lt;\u002Ftemplate&gt; &lt;!-- UserListItem.vue --&gt; &lt;script setup&gt; defineProps({ user: { type: Object, required: true } }) &lt;\u002Fscript&gt; &lt;template&gt; &lt;li class=&quot;user-item&quot;&gt; &lt;img :src=&quot;user.avatar&quot; \u002F&gt; &lt;span&gt;{{ user.name }}&lt;\u002Fspan&gt; &lt;\u002Fli&gt; &lt;\u002Ftemplate&gt; 4. Smart vs Dumb Components Pattern Separate data handling from presentation. Smart components manage logic and data fetching, dumb components simply take in props to handle display. Furthermore, base components provide the fundamental building blocks of your application (such as cards, buttons, etc) and by convention start with v, base, or app. &lt;!-- Smart Component --&gt; &lt;script setup&gt; import { ref } from &#039;vue&#039; const users = ref([]) const loading = ref(true) async function fetchUsers() { users.value = await api.getUsers() loading.value = false } function createUser(){ \u002F\u002F open modal to create user or whatever } &lt;\u002Fscript&gt; &lt;template&gt; &lt;AppButton @click=&quot;createUser&quot; &gt;Create User&lt;\u002FAppButton&gt; &lt;UserList :users=&quot;users&quot; :loading=&quot;loading&quot; \u002F&gt; &lt;\u002Ftemplate&gt; &lt;!-- Dumb Component --&gt; &lt;script setup&gt; defineProps({ users: Array, loading: Boolean }) &lt;\u002Fscript&gt; &lt;template&gt; &lt;div class=&quot;user-list&quot;&gt; &lt;!-- Pure presentation logic --&gt; &lt;\u002Fdiv&gt; &lt;\u002Ftemplate&gt; 5. Form Component Design Pattern v-model on native input fields is awesome! We can do similar with whole forms. This approach accounts for the way users interact with forms: they expect committed data only after click of submit. It also works like a charm with native input validation as the submit event never fires until native validation passes. &lt;script setup&gt; \u002F\u002F support v-model const user = defineModel() \u002F\u002F clone the modelValue to local data \u002F\u002F and provide a fallback user if none provided const form = ref(clone(user) || { name: &#039;&#039;, emaill: &#039;&#039; }) \u002F\u002F only update the modelValue when the form is submitted function handleSubmit() { user.value = clone(form.value); } \u002F\u002F Reset form when prop changes watch(user, () =&gt; form.value = clone(user.value)) const clone = (obj)=&gt; JSON.parse(JSON.stringify(obj)) &lt;\u002Fscript&gt; &lt;template&gt; &lt;form @submit.prevent=&quot;handleSubmit&quot;&gt; &lt;!-- Bind the form inputs to the local data instead of the modelValue --&gt; &lt;input v-model=&quot;form.name&quot; required\u002F&gt; &lt;input v-model=&quot;form.email&quot; \u002F&gt; &lt;!-- Bonus! You can even have dynamic submit button labels based on the modelValue passed in--&gt; &lt;button type=&quot;submit&quot;&gt; {{ user ? &#039;Update&#039; : &#039;Create&#039; }} User &lt;\u002Fbutton&gt; &lt;\u002Fform&gt; &lt;\u002Ftemplate&gt; Looking for More Patterns? We cover all these patterns discussed above in more detail in our course: Vue Component Design. Plus get a preview of some more advanced patterns like the Tightly Coupled Components Pattern, Recursive Components, and Lazy Dynamic Components. Besides our own course, Michael Thiessen’s Clean Components Toolkit is a great resource for further exploring not only component patterns but also patterns for stores, composables, and more.","2026-05-14T12:00:11.684Z","019e265b-cf92-75c7-bb8d-65f5cb9a819d","https:\u002F\u002Fblog.vueschool.io\u002Fwp-content\u002Fuploads\u002F2024\u002F12\u002FVS_5-Component-Design-Patterns-to-Boost-Your-Vue.js-Applications-1.png",true,"2026-05-14T08:00:26.000Z","5-component-design-patterns-to-boost-your-vuejs-applications","019d6bd5-87de-77ef-ac92-98aa56cda920","VueSchool","vueschool","This article introduces a new course focused on component design patterns in Vue.js, aimed at enhancing scalability and maintainability of Vue applications. It outlines several design patterns, such as the Branching Component Design Pattern and the use of slots, which can help developers improve their code structure and readability.","5 Component Design Patterns to Boost Your Vue.js Applications","2026-05-14T12:00:21.296Z","https:\u002F\u002Fblog.vueschool.io\u002Fvuejs-tutorials\u002F5-component-design-patterns-to-boost-your-vue-js-applications\u002F?friend=MOKKAPPS","998659ef4f9a67af7ef263b481fc23eaa61736efd82e77946c3a11812701ff78",[30,33,36,39,40],{"color":6,"id":31,"name":32,"slug":32},"019d6bd8-c9a8-7783-bd22-03145b355427","vue",{"color":6,"id":34,"name":35,"slug":35},"019d6bd8-fba5-743f-8f9f-4e23c0b31581","tutorial",{"color":6,"id":37,"name":38,"slug":38},"019e265b-f569-71d8-a02a-a17ec8180644","component-design",{"color":6,"id":7,"name":8,"slug":8},{"color":6,"id":41,"name":42,"slug":42},"019e265b-f579-71cd-84b2-ac385b5225ae","maintainability",20,{"tags":45},[46,51,55,60,64,68,73,77,81,85,89,93,98,102,106,110,114,118,122,126,130,134,138,142,146,150,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,254,258,262,266,270,274,278,282,286,290,295,299,303,307,311,315,319,324,328,332,336,340,344,348,352,356,360,364,366,370,374,378,382,386,390,394,399,403,407,411,415,419,423,427,431,435,438,442,446,450,454,458,462,466,470,474,477,481,485,490],{"articleCount":47,"color":6,"createdAt":48,"id":49,"name":50,"slug":50,"updatedAt":48},0,"2026-04-30T04:19:02.605Z","019ddc9c-954c-7703-8288-76d562fec577","accelerator",{"articleCount":5,"color":6,"createdAt":52,"id":53,"name":54,"slug":54,"updatedAt":52},"2026-04-08T06:47:43.120Z","019d6bd8-caef-76b9-bacd-363e31e6d2a9","accessibility",{"articleCount":56,"color":6,"createdAt":57,"id":58,"name":59,"slug":59,"updatedAt":57},8,"2026-04-17T20:27:50.780Z","019d9d20-e07b-7685-9ebb-fae0b963f243","ai",{"articleCount":47,"color":6,"createdAt":61,"id":62,"name":63,"slug":63,"updatedAt":61},"2026-05-05T00:00:19.031Z","019df56f-8257-752e-a918-cdbb07c32b86","ai-agents",{"articleCount":5,"color":6,"createdAt":65,"id":66,"name":67,"slug":67,"updatedAt":65},"2026-06-01T12:00:14.713Z","019e830e-5378-722b-929b-a57d67bcf605","animation",{"articleCount":69,"color":6,"createdAt":70,"id":71,"name":72,"slug":72,"updatedAt":70},4,"2026-04-08T06:47:55.499Z","019d6bd8-fb46-77ef-a3b6-bd2d30ab8919","api",{"articleCount":56,"color":6,"createdAt":74,"id":75,"name":76,"slug":76,"updatedAt":74},"2026-04-17T19:35:19.300Z","019d9cf0-ca04-75bb-ad86-ce8da1c0be23","architecture",{"articleCount":47,"color":6,"createdAt":78,"id":79,"name":80,"slug":80,"updatedAt":78},"2026-04-23T12:00:11.615Z","019dba36-435e-765d-bfb2-c5be05362c27","astro",{"articleCount":47,"color":6,"createdAt":82,"id":83,"name":84,"slug":84,"updatedAt":82},"2026-06-01T20:00:15.958Z","019e84c5-cc55-7377-9e5d-77240ea8a880","authentication",{"articleCount":47,"color":6,"createdAt":86,"id":87,"name":88,"slug":88,"updatedAt":86},"2026-05-05T00:00:19.020Z","019df56f-824c-7031-9e34-2f47ad139eb6","automation",{"articleCount":47,"color":6,"createdAt":90,"id":91,"name":92,"slug":92,"updatedAt":90},"2026-06-11T16:00:12.019Z","019eb769-9af2-7471-b482-3f1a404f802e","azure",{"articleCount":94,"color":6,"createdAt":95,"id":96,"name":97,"slug":97,"updatedAt":95},2,"2026-04-17T20:27:50.776Z","019d9d20-e077-71cc-a605-8ac2a1566143","backend",{"articleCount":69,"color":6,"createdAt":99,"id":100,"name":101,"slug":101,"updatedAt":99},"2026-04-08T06:47:56.976Z","019d6bd9-010e-772d-b2f0-9378a042a676","best-practices",{"articleCount":47,"color":6,"createdAt":103,"id":104,"name":105,"slug":105,"updatedAt":103},"2026-06-06T00:00:11.711Z","019e9a3a-e5be-74b3-a01a-92c1f9427a2c","beta",{"articleCount":47,"color":6,"createdAt":107,"id":108,"name":109,"slug":109,"updatedAt":107},"2026-06-10T13:53:29.711Z","019eb1cf-3e6e-70f0-a761-0fb9b61d5675","budgeting",{"articleCount":5,"color":6,"createdAt":111,"id":112,"name":113,"slug":113,"updatedAt":111},"2026-06-16T16:11:31.438Z","019ed133-c4ee-70bb-8e21-7dc86e8adee4","bun",{"articleCount":47,"color":6,"createdAt":115,"id":116,"name":117,"slug":117,"updatedAt":115},"2026-05-19T20:00:14.559Z","019e41d3-1ade-77b0-9e4f-e9b97a6361ca","cdn",{"articleCount":5,"color":6,"createdAt":119,"id":120,"name":121,"slug":121,"updatedAt":119},"2026-06-27T16:00:12.237Z","019f09cf-5bcd-751c-8d46-9e123bd784af","clean-code",{"articleCount":5,"color":6,"createdAt":123,"id":124,"name":125,"slug":125,"updatedAt":123},"2026-05-16T18:48:40.777Z","019e321e-8248-75cc-9b69-59c2db6dd846","cli",{"articleCount":47,"color":6,"createdAt":127,"id":128,"name":129,"slug":129,"updatedAt":127},"2026-05-05T00:00:19.014Z","019df56f-8246-747f-be4b-a716863a93ea","cloud-platform",{"articleCount":5,"color":6,"createdAt":131,"id":132,"name":133,"slug":133,"updatedAt":131},"2026-06-16T16:11:31.289Z","019ed133-c458-74d8-a5c9-654f77837e7c","cloudflare",{"articleCount":5,"color":6,"createdAt":135,"id":136,"name":137,"slug":137,"updatedAt":135},"2026-07-27T18:11:45.304Z","019fa4c6-93c3-76ea-baa3-7d5fe541ac5b","cms",{"articleCount":5,"color":6,"createdAt":139,"id":140,"name":141,"slug":141,"updatedAt":139},"2026-04-30T04:19:02.045Z","019ddc9c-931c-743d-a1cb-e4449630fe47","collaboration",{"articleCount":5,"color":6,"createdAt":143,"id":144,"name":145,"slug":145,"updatedAt":143},"2026-06-10T13:53:29.567Z","019eb1cf-3dde-776d-9398-4863764f9ac3","community",{"articleCount":5,"color":6,"createdAt":147,"id":148,"name":149,"slug":149,"updatedAt":147},"2026-05-06T16:00:17.128Z","019dfe04-bee8-7384-bc58-a712f677807c","comparison",{"articleCount":5,"color":6,"createdAt":151,"id":37,"name":38,"slug":38,"updatedAt":151},"2026-05-14T12:00:21.354Z",{"articleCount":5,"color":6,"createdAt":153,"id":154,"name":155,"slug":155,"updatedAt":153},"2026-07-18T20:00:18.730Z","019f76d0-bb29-72d6-8d0b-05ffd1d3c8ed","composables",{"articleCount":69,"color":6,"createdAt":157,"id":158,"name":159,"slug":159,"updatedAt":157},"2026-04-08T06:47:42.915Z","019d6bd8-ca21-71c5-a236-37d94fe57d24","composition-api",{"articleCount":5,"color":6,"createdAt":161,"id":162,"name":163,"slug":163,"updatedAt":161},"2026-06-27T12:00:13.113Z","019f08f3-a538-74ed-82c5-038edce7100a","copilot",{"articleCount":47,"color":6,"createdAt":165,"id":166,"name":167,"slug":167,"updatedAt":165},"2026-04-25T12:00:12.674Z","019dc482-ff81-73ac-9b1c-6ad47f0afde0","data-management",{"articleCount":47,"color":6,"createdAt":169,"id":170,"name":171,"slug":171,"updatedAt":169},"2026-06-04T20:00:17.367Z","019e9438-e5d7-731f-bf47-8dcd86c6655c","data-privacy",{"articleCount":5,"color":6,"createdAt":173,"id":174,"name":175,"slug":175,"updatedAt":173},"2026-05-05T12:00:17.083Z","019df802-a8bb-775a-b843-93d883c7dfc5","data-science",{"articleCount":47,"color":6,"createdAt":177,"id":178,"name":179,"slug":179,"updatedAt":177},"2026-06-11T16:00:12.028Z","019eb769-9afb-7709-8a67-2a12f5e557c7","deepseek",{"articleCount":5,"color":6,"createdAt":181,"id":182,"name":183,"slug":183,"updatedAt":181},"2026-05-25T08:00:12.834Z","019e5e26-0e21-7366-87c7-0b1334180b0a","dependency-cruiser",{"articleCount":5,"color":6,"createdAt":185,"id":186,"name":187,"slug":187,"updatedAt":185},"2026-04-18T04:30:00.710Z","019d9eda-5005-7329-a463-189572e25635","deployment",{"articleCount":94,"color":6,"createdAt":189,"id":190,"name":191,"slug":191,"updatedAt":189},"2026-04-21T12:00:11.373Z","019dafe9-8a6d-7218-81f1-37052cbe9b78","development",{"articleCount":5,"color":6,"createdAt":193,"id":194,"name":195,"slug":195,"updatedAt":193},"2026-06-29T08:00:12.101Z","019f1264-9f44-762d-b5fd-837839fdc586","devtools",{"articleCount":47,"color":6,"createdAt":197,"id":198,"name":199,"slug":199,"updatedAt":197},"2026-05-29T20:00:13.197Z","019e7552-ad8c-731f-ad8b-49253ed0e1b9","docker",{"articleCount":5,"color":6,"createdAt":201,"id":202,"name":203,"slug":203,"updatedAt":201},"2026-06-27T12:00:13.081Z","019f08f3-a518-7607-aa8c-782b4f10c2ed","documentation",{"articleCount":5,"color":6,"createdAt":205,"id":206,"name":207,"slug":207,"updatedAt":205},"2026-04-30T04:19:02.055Z","019ddc9c-9327-744f-a2da-31b64c7b6ba4","editor",{"articleCount":5,"color":6,"createdAt":209,"id":210,"name":211,"slug":211,"updatedAt":209},"2026-07-06T12:00:24.261Z","019f374d-0cc4-71ff-b906-ebaec8b0c343","eslint",{"articleCount":47,"color":6,"createdAt":213,"id":214,"name":215,"slug":215,"updatedAt":213},"2026-05-02T00:00:23.123Z","019de5fc-7e52-740a-807c-d322c373865b","firewall",{"articleCount":5,"color":6,"createdAt":217,"id":218,"name":219,"slug":219,"updatedAt":217},"2026-05-06T16:00:17.134Z","019dfe04-beee-7481-b8e7-4034640e840a","frameworks",{"articleCount":47,"color":6,"createdAt":221,"id":222,"name":223,"slug":223,"updatedAt":221},"2026-04-08T06:47:56.883Z","019d6bd9-00b2-7199-8e88-2530ef258032","generics",{"articleCount":5,"color":6,"createdAt":225,"id":226,"name":227,"slug":227,"updatedAt":225},"2026-07-27T18:11:45.390Z","019fa4c6-9419-7657-844e-58ec868ed664","git",{"articleCount":94,"color":6,"createdAt":229,"id":230,"name":231,"slug":231,"updatedAt":229},"2026-07-15T00:00:22.207Z","019f6313-12bf-7151-81f2-c8b43b09d979","html",{"articleCount":47,"color":6,"createdAt":233,"id":234,"name":235,"slug":235,"updatedAt":233},"2026-05-06T00:00:17.012Z","019dfa95-d673-71ef-be4a-8761512ffe5c","infrastructure",{"articleCount":5,"color":6,"createdAt":237,"id":238,"name":239,"slug":239,"updatedAt":237},"2026-06-16T16:11:31.264Z","019ed133-c43f-704f-8c1a-fbc299c8a3e5","javascript",{"articleCount":5,"color":6,"createdAt":241,"id":242,"name":243,"slug":243,"updatedAt":241},"2026-07-13T08:00:18.266Z","019f5a7d-bf5a-76e0-903a-c87435cc3e09","lazy-loading",{"articleCount":5,"color":6,"createdAt":245,"id":246,"name":247,"slug":247,"updatedAt":245},"2026-05-11T12:00:19.963Z","019e16e8-dbfa-76d6-bb2d-793aee049186","loading",{"articleCount":47,"color":6,"createdAt":249,"id":250,"name":251,"slug":251,"updatedAt":249},"2026-04-25T12:00:12.682Z","019dc482-ff8a-7698-8af5-95db54a26d6b","local-first",{"articleCount":5,"color":6,"createdAt":253,"id":41,"name":42,"slug":42,"updatedAt":253},"2026-05-14T12:00:21.370Z",{"articleCount":5,"color":6,"createdAt":255,"id":256,"name":257,"slug":257,"updatedAt":255},"2026-05-10T16:00:18.613Z","019e129e-34b4-7107-acfb-27f6b8604eb0","management",{"articleCount":5,"color":6,"createdAt":259,"id":260,"name":261,"slug":261,"updatedAt":259},"2026-06-27T12:00:13.065Z","019f08f3-a508-7334-aa03-12b281698ea8","markdown",{"articleCount":5,"color":6,"createdAt":263,"id":264,"name":265,"slug":265,"updatedAt":263},"2026-07-28T12:00:27.878Z","019fa899-02e6-758e-bdcb-8a4a923507df","mcp",{"articleCount":5,"color":6,"createdAt":267,"id":268,"name":269,"slug":269,"updatedAt":267},"2026-06-17T12:00:12.439Z","019ed574-0a96-7485-9c90-522e4be3e092","meta-tags",{"articleCount":47,"color":6,"createdAt":271,"id":272,"name":273,"slug":273,"updatedAt":271},"2026-05-26T08:00:14.598Z","019e634c-7105-7073-bc86-c32fa0a4401b","microfrontends",{"articleCount":47,"color":6,"createdAt":275,"id":276,"name":277,"slug":277,"updatedAt":275},"2026-05-19T16:00:13.516Z","019e40f7-5ccc-729c-92ba-bcc0aad8a16f","microvm",{"articleCount":47,"color":6,"createdAt":279,"id":280,"name":281,"slug":281,"updatedAt":279},"2026-05-05T00:00:19.025Z","019df56f-8250-768c-a659-b9f524ff902c","multi-tenant",{"articleCount":47,"color":6,"createdAt":283,"id":284,"name":285,"slug":285,"updatedAt":283},"2026-05-08T04:00:17.998Z","019e05be-4c4d-759e-a51e-8ac760f82f6d","nextjs",{"articleCount":5,"color":6,"createdAt":287,"id":288,"name":289,"slug":289,"updatedAt":287},"2026-04-17T19:35:19.293Z","019d9cf0-c9fc-76a0-8c4e-b818a89c3774","nitro",{"articleCount":291,"color":6,"createdAt":292,"id":293,"name":294,"slug":294,"updatedAt":292},27,"2026-04-08T06:47:55.381Z","019d6bd8-fad3-70a9-a74d-ab96e3a2f45d","nuxt",{"articleCount":5,"color":6,"createdAt":296,"id":297,"name":298,"slug":298,"updatedAt":296},"2026-04-30T04:19:02.038Z","019ddc9c-9315-735e-a7e8-8424790e8859","nuxt-ui",{"articleCount":5,"color":6,"createdAt":300,"id":301,"name":302,"slug":302,"updatedAt":300},"2026-06-08T12:00:16.030Z","019ea71a-dc9d-7607-9cfa-df0f31ab5876","observability",{"articleCount":47,"color":6,"createdAt":304,"id":305,"name":306,"slug":306,"updatedAt":304},"2026-05-04T20:00:20.503Z","019df493-ce17-76ed-bd80-2a3914e0f409","open-source",{"articleCount":5,"color":6,"createdAt":308,"id":309,"name":310,"slug":310,"updatedAt":308},"2026-06-08T12:00:16.022Z","019ea71a-dc95-72b8-a7e3-70f9e2ac3710","opentelemetry",{"articleCount":69,"color":6,"createdAt":312,"id":313,"name":314,"slug":314,"updatedAt":312},"2026-05-18T12:00:14.389Z","019e3af5-4a35-705c-8ab1-4404b653e0e8","optimization",{"articleCount":5,"color":6,"createdAt":316,"id":317,"name":318,"slug":318,"updatedAt":316},"2026-05-28T20:00:13.016Z","019e702c-50d7-74eb-8849-8b1cebcf411e","orchestration",{"articleCount":320,"color":6,"createdAt":321,"id":322,"name":323,"slug":323,"updatedAt":321},16,"2026-04-08T06:47:42.920Z","019d6bd8-ca26-775c-b9b5-c3439dbe5789","performance",{"articleCount":5,"color":6,"createdAt":325,"id":326,"name":327,"slug":327,"updatedAt":325},"2026-06-10T13:53:29.575Z","019eb1cf-3de7-7326-87d9-c55ad1c0fa39","personalization",{"articleCount":5,"color":6,"createdAt":329,"id":330,"name":331,"slug":331,"updatedAt":329},"2026-04-17T19:35:19.263Z","019d9cf0-c9de-70b2-9057-76d771c3379e","pinia",{"articleCount":47,"color":6,"createdAt":333,"id":334,"name":335,"slug":335,"updatedAt":333},"2026-05-02T00:00:23.112Z","019de5fc-7e47-7075-8aeb-9e90f7689f57","postgres",{"articleCount":47,"color":6,"createdAt":337,"id":338,"name":339,"slug":339,"updatedAt":337},"2026-05-19T20:00:14.575Z","019e41d3-1aee-70c8-a07c-cec870115d14","pricing",{"articleCount":5,"color":6,"createdAt":341,"id":342,"name":343,"slug":343,"updatedAt":341},"2026-05-10T16:00:18.603Z","019e129e-34aa-723b-a568-45737915c7bf","qa",{"articleCount":5,"color":6,"createdAt":345,"id":346,"name":347,"slug":347,"updatedAt":345},"2026-05-08T04:00:18.013Z","019e05be-4c5c-75ad-8df5-602b3db57983","react",{"articleCount":69,"color":6,"createdAt":349,"id":350,"name":351,"slug":351,"updatedAt":349},"2026-04-20T12:00:11.653Z","019daac3-2f85-7393-b891-9da3891267ca","reactivity",{"articleCount":69,"color":6,"createdAt":353,"id":354,"name":355,"slug":355,"updatedAt":353},"2026-04-17T20:27:50.585Z","019d9d20-dfb9-7041-9973-39c545b33a2d","release",{"articleCount":47,"color":6,"createdAt":357,"id":358,"name":359,"slug":359,"updatedAt":357},"2026-05-26T08:00:14.619Z","019e634c-711a-728f-9b63-20f2c8b37ccb","routing",{"articleCount":47,"color":6,"createdAt":361,"id":362,"name":363,"slug":363,"updatedAt":361},"2026-05-19T16:00:13.509Z","019e40f7-5cc4-72e1-8f8b-692dd29fc716","sandbox",{"articleCount":5,"color":6,"createdAt":365,"id":7,"name":8,"slug":8,"updatedAt":365},"2026-05-14T12:00:21.362Z",{"articleCount":47,"color":6,"createdAt":367,"id":368,"name":369,"slug":369,"updatedAt":367},"2026-05-04T20:00:20.521Z","019df493-ce28-75e9-93d5-13251407a27b","scanning",{"articleCount":69,"color":6,"createdAt":371,"id":372,"name":373,"slug":373,"updatedAt":371},"2026-04-27T08:00:12.420Z","019dcdf3-fc84-73aa-a0be-6b7196c5a2e9","security",{"articleCount":5,"color":6,"createdAt":375,"id":376,"name":377,"slug":377,"updatedAt":375},"2026-06-17T12:00:12.428Z","019ed574-0a8b-7566-976f-8c281c820ed0","seo",{"articleCount":5,"color":6,"createdAt":379,"id":380,"name":381,"slug":381,"updatedAt":379},"2026-06-17T12:00:12.433Z","019ed574-0a91-74d8-b806-56681bb4b477","sitemap",{"articleCount":5,"color":6,"createdAt":383,"id":384,"name":385,"slug":385,"updatedAt":383},"2026-07-18T16:00:27.576Z","019f75f5-23b8-72eb-a2bf-79dd1fed3863","software-development",{"articleCount":5,"color":6,"createdAt":387,"id":388,"name":389,"slug":389,"updatedAt":387},"2026-04-17T19:35:19.297Z","019d9cf0-ca00-749d-9101-1c63bf62e215","spas",{"articleCount":94,"color":6,"createdAt":391,"id":392,"name":393,"slug":393,"updatedAt":391},"2026-06-03T16:00:12.620Z","019e8e36-bd4b-740d-b23a-81858b24025b","ssg",{"articleCount":395,"color":6,"createdAt":396,"id":397,"name":398,"slug":398,"updatedAt":396},9,"2026-04-08T06:47:43.020Z","019d6bd8-ca89-735e-a52a-ee53a80a77a9","ssr",{"articleCount":47,"color":6,"createdAt":400,"id":401,"name":402,"slug":402,"updatedAt":400},"2026-04-30T04:19:02.613Z","019ddc9c-9555-7544-a3e3-0605d2c1ea82","startup",{"articleCount":69,"color":6,"createdAt":404,"id":405,"name":406,"slug":406,"updatedAt":404},"2026-04-18T12:00:12.027Z","019da076-78fb-706b-9a4c-cee0c989cfff","state-management",{"articleCount":47,"color":6,"createdAt":408,"id":409,"name":410,"slug":410,"updatedAt":408},"2026-06-06T00:00:11.717Z","019e9a3a-e5c5-76d3-86e4-576c151a87b3","storage",{"articleCount":5,"color":6,"createdAt":412,"id":413,"name":414,"slug":414,"updatedAt":412},"2026-06-17T12:00:12.446Z","019ed574-0a9e-7712-8bc5-a0102787fe48","structured-data",{"articleCount":5,"color":6,"createdAt":416,"id":417,"name":418,"slug":418,"updatedAt":416},"2026-05-10T16:00:18.597Z","019e129e-34a4-771a-844d-09a7edefcd64","tdd",{"articleCount":47,"color":6,"createdAt":420,"id":421,"name":422,"slug":422,"updatedAt":420},"2026-06-04T20:00:17.351Z","019e9438-e5c6-7681-8704-897c7b499eb4","terms-of-service",{"articleCount":94,"color":6,"createdAt":424,"id":425,"name":426,"slug":426,"updatedAt":424},"2026-04-09T06:11:45.799Z","019d70de-3c07-76bf-9688-9619e1b0d427","testing",{"articleCount":5,"color":6,"createdAt":428,"id":429,"name":430,"slug":430,"updatedAt":428},"2026-06-16T16:11:31.088Z","019ed133-c390-75bf-8f1a-5c57cd221f14","threejs",{"articleCount":47,"color":6,"createdAt":432,"id":433,"name":434,"slug":434,"updatedAt":432},"2026-05-02T00:00:23.130Z","019de5fc-7e59-7426-8d46-e79e4bcf0d56","tls",{"articleCount":436,"color":6,"createdAt":437,"id":34,"name":35,"slug":35,"updatedAt":437},10,"2026-04-08T06:47:55.591Z",{"articleCount":69,"color":6,"createdAt":439,"id":440,"name":441,"slug":441,"updatedAt":439},"2026-04-08T06:47:56.778Z","019d6bd9-0049-72ba-8cfa-139b1c1b249d","typescript",{"articleCount":443,"color":6,"createdAt":396,"id":444,"name":445,"slug":445,"updatedAt":396},5,"019d6bd8-ca8b-709c-b9a5-77d4910da162","ui-components",{"articleCount":5,"color":6,"createdAt":447,"id":448,"name":449,"slug":449,"updatedAt":447},"2026-05-11T12:00:19.969Z","019e16e8-dc00-714d-911a-a5bf39238587","user-experience",{"articleCount":5,"color":6,"createdAt":451,"id":452,"name":453,"slug":453,"updatedAt":451},"2026-05-18T12:00:14.379Z","019e3af5-4a29-759a-81b0-b6d502b2449e","v-memo",{"articleCount":47,"color":6,"createdAt":455,"id":456,"name":457,"slug":457,"updatedAt":455},"2026-04-30T04:19:02.228Z","019ddc9c-93d3-763e-ad3c-d3ad78642de7","vercel",{"articleCount":5,"color":6,"createdAt":459,"id":460,"name":461,"slug":461,"updatedAt":459},"2026-07-13T08:00:18.274Z","019f5a7d-bf61-746b-a44b-5c0a16ff57d3","video",{"articleCount":69,"color":6,"createdAt":463,"id":464,"name":465,"slug":465,"updatedAt":463},"2026-04-17T19:35:19.289Z","019d9cf0-c9f8-7411-beed-02265d8271db","vite",{"articleCount":5,"color":6,"createdAt":467,"id":468,"name":469,"slug":469,"updatedAt":467},"2026-04-25T18:08:02.132Z","019dc5d3-c054-70e2-bca4-08e2a2b9a096","vitest",{"articleCount":5,"color":6,"createdAt":471,"id":472,"name":473,"slug":473,"updatedAt":471},"2026-06-27T12:00:13.107Z","019f08f3-a532-7049-a02c-c17a4fd99306","vscode",{"articleCount":475,"color":6,"createdAt":476,"id":31,"name":32,"slug":32,"updatedAt":476},32,"2026-04-08T06:47:42.793Z",{"articleCount":5,"color":6,"createdAt":478,"id":479,"name":480,"slug":480,"updatedAt":478},"2026-04-18T12:00:12.007Z","019da076-78e6-76bd-b0d4-4e0597d36378","vue-router",{"articleCount":47,"color":6,"createdAt":482,"id":483,"name":484,"slug":484,"updatedAt":482},"2026-05-04T20:00:20.510Z","019df493-ce1d-7039-811a-ed57bf081d26","vulnerability",{"articleCount":486,"color":6,"createdAt":487,"id":488,"name":489,"slug":489,"updatedAt":487},3,"2026-05-05T12:00:17.078Z","019df802-a8b6-74d2-a0cd-b0509cf502fa","web-development",{"articleCount":486,"color":6,"createdAt":491,"id":492,"name":493,"slug":493,"updatedAt":491},"2026-05-10T16:00:18.576Z","019e129e-3490-7739-a218-5454a8c15d6e","workflow"]