[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"contentNavigation":3,"topic-eslint":4,"newsletter-stats":9,"articles-feed-\u002Ftopics\u002Feslint-1-eslint-":11,"$fQa3xUpnRDPNiFFu2QS4K-DAjYmsapeR9fNhPNBdpkOc":-1,"home-tags":45},[],{"articleCount":5,"color":6,"id":7,"name":8,"slug":8},1,"#10b981","019f374d-0cc4-71ff-b906-ebaec8b0c343","eslint",{"confirmedCount":10},409,{"items":12,"page":5,"pageSize":44,"totalCount":5},[13],{"content":14,"createdAt":15,"id":16,"image":17,"isAffiliate":18,"isPublished":19,"publishedAt":20,"slug":21,"sourceId":22,"sourceName":23,"sourceType":24,"summary":25,"title":26,"updatedAt":27,"url":28,"urlHash":29,"tags":30},"As Vue applications grow, keeping the codebase clean becomes increasingly challenging. At first, everyone follows the same conventions. But over time, you start noticing things like: inconsistent component structure multiple ways of solving the same problem different Composition API patterns imports scattered everywhere code that's difficult to review and maintain This is where ESLint becomes much more than a tool for formatting—it becomes a way to enforce your project's architecture and design patterns. In this article, we'll explore: Why ESLint is more than a linter How it helps maintain a consistent architecture Useful Vue-specific rules Examples of enforcing project-wide patterns Best practices for scaling Vue applications Let's dive in. 🤔 ESLint Is More Than a Code Formatter Many developers think ESLint is only used to catch things like; unused variables, missing semicolons, incorrect formatting. While that's true, ESLint can do much more. With the right configuration, it can enforce: coding conventions project architecture Vue best practices Composition API patterns import organization component structure Instead of relying on code reviews to catch inconsistencies, ESLint prevents them before the code is even merged. 🟢 What Problem Does It Solve? Imagine a team of five developers. One component looks like this: &lt;script setup&gt; ... &lt;\u002Fscript&gt; &lt;template&gt; ... &lt;\u002Ftemplate&gt; &lt;style&gt; ... &lt;\u002Fstyle&gt; Another one: &lt;template&gt; ... &lt;\u002Ftemplate&gt; &lt;script setup&gt; ... &lt;\u002Fscript&gt; Someone uses: watch() Someone else always prefers: watchEffect() Some developers use relative imports: ..\u002F..\u002F..\u002Fcomponents\u002FButton.vue Others use aliases: ~\u002Fcomponents\u002FButton.vue None of these are necessarily wrong... but together they create inconsistency across the project. ESLint helps eliminate these differences by enforcing one agreed-upon way of writing code. 🟢 Enforcing Vue Block Order One of the simplest examples is keeping Vue Single File Components organized. Using the vue\u002Fblock-order rule, you can define the exact order of blocks. Example: &lt;template&gt; ... &lt;\u002Ftemplate&gt; &lt;script setup lang=\"ts\"&gt; ... &lt;\u002Fscript&gt; &lt;style scoped&gt; ... &lt;\u002Fstyle&gt; 🟢 Enforcing Composition API Patterns One of the biggest advantages of ESLint is enforcing how developers use Vue APIs. For example, you might decide that your project should always use: &lt;script setup&gt; Composition API defineProps defineEmits And avoid Options API or inconsistent component definitions. This ensures new components follow the same architecture from day one. 🟢 Restricting Specific APIs Sometimes you want to discourage certain patterns altogether. For example, you may decide: ❌ Avoid watch() unless absolutely necessary. Prefer: computed() or watchEffect() ESLint can restrict the use of specific APIs and encourage better alternatives. This keeps reactive logic predictable and easier to maintain. 🟢 Enforcing Import Conventions Large Vue projects often suffer from inconsistent imports. Example: import Button from '..\u002F..\u002F..\u002Fcomponents\u002FButton.vue' vs. import Button from '~\u002Fcomponents\u002FButton.vue' ESLint can enforce: path aliases import ordering grouped imports no duplicate imports The result is cleaner and more consistent code. 🟢 Preventing Architectural Violations ESLint can also help enforce architectural boundaries. For example: Components shouldn't access API clients directly. Feature modules shouldn't import from other features. UI components shouldn't depend on business logic. Using rules such as no-restricted-imports, you can prevent these patterns entirely. Example: 'no-restricted-imports': [ 'error', { patterns: [ '@\u002Fapi\u002F*' ] } ] Now components can't accidentally bypass your intended architecture. 🟢 Creating Custom Rules for Your Team One of ESLint's greatest strengths is extensibility. Beyond built-in rules, you can create custom rules—or use plugins—to enforce project-specific conventions. For example: composables must start with use stores must live in a dedicated folder feature modules cannot import each other utility functions must remain pure internal design system components must be used instead of native HTML elements As your project grows, these automated checks become far more reliable than relying solely on code reviews. 🟢 Why This Matters in Large Vue Applications Small projects can survive without strict rules. Large projects usually can't. Consistency helps: onboard new developers faster simplify code reviews reduce technical debt prevent architectural drift improve long-term maintainability Instead of debating coding style in every pull request ESLint enforces it automatically. 🧪 Best Practices Treat ESLint as an architecture tool—not just a linter Enable Vue-specific rules from eslint-plugin-vue Agree on project conventions early Enforce Composition API patterns consistently Use no-restricted-imports to protect architectural boundaries Automate linting in CI\u002FCD pipelines Keep rules practical—avoid overcomplicating your configuration 📖 Learn more If you would like to learn more about Vue, Nuxt, JavaScript or other useful technologies, checkout VueSchool by clicking this link or by clicking the image below: It covers most important concepts while building modern Vue or Nuxt applications that can help you in your daily work or side projects 😉 🧪 Advance skills A certification boosts your skills, builds credibility, and opens doors to new opportunities. Whether you're advancing your career or switching paths, it's a smart step toward success. Check out Certificates.dev by clicking this link or by clicking the image below: Invest in yourself—get certified in Vue.js, JavaScript, Nuxt, Angular, React, and more! ✅ Summary ESLint is much more than a tool for catching syntax errors or enforcing formatting. As Vue applications grow, consistency becomes just as important as functionality. By using ESLint to enforce architectural decisions, you ensure that every new piece of code follows the same standards—making your project easier to understand, review, and maintain for years to come. Take care! And happy coding as always 🖥️","2026-07-06T12:00:09.479Z","019f374c-d2f0-769a-8a4f-180c7f565bd4","https:\u002F\u002Fmedia2.dev.to\u002Fdynamic\u002Fimage\u002Fwidth=1200,height=627,fit=cover,gravity=auto,format=auto\u002Fhttps%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fevhhwr5be00v4h9dmmxi.png",false,true,"2026-07-06T08:38:53.000Z","enforce-better-vue-architecture-with-eslint","019d6bd6-7fe0-7244-80dc-9a4e8751886a","Jakub Andrzejewski","rss","This article discusses how ESLint can be leveraged to enforce a consistent architecture and coding standards in Vue applications. It highlights the importance of using ESLint beyond formatting, showcasing its ability to maintain project-wide patterns, improve code review processes, and ensure best practices in Vue development, particularly with the Composition API.","Enforce Better Vue Architecture with ESLint","2026-07-06T12:00:24.181Z","https:\u002F\u002Fdev.to\u002Fjacobandrewsky\u002Fenforce-better-vue-architecture-with-eslint-3fb0","5987f1e0425bcd09cd7e156b69730144717e56a57baa8243a9f5f2c7670170ef",[31,34,37,40,43],{"color":6,"id":32,"name":33,"slug":33},"019d6bd8-c9a8-7783-bd22-03145b355427","vue",{"color":6,"id":35,"name":36,"slug":36},"019d6bd8-ca21-71c5-a236-37d94fe57d24","composition-api",{"color":6,"id":38,"name":39,"slug":39},"019d6bd9-010e-772d-b2f0-9378a042a676","best-practices",{"color":6,"id":41,"name":42,"slug":42},"019d9cf0-ca04-75bb-ad86-ce8da1c0be23","architecture",{"color":6,"id":7,"name":8,"slug":8},20,{"tags":46},[47,52,56,61,65,69,74,76,80,84,88,92,97,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,157,161,165,169,173,177,181,185,189,193,197,201,205,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263,267,271,275,279,283,287,292,296,300,304,308,312,316,321,325,329,333,337,341,345,349,353,357,361,365,369,373,377,381,385,389,393,398,402,406,410,414,418,422,426,430,434,439,443,447,451,455,459,463,467,471,475,478,482,486,491],{"articleCount":48,"color":6,"createdAt":49,"id":50,"name":51,"slug":51,"updatedAt":49},0,"2026-04-30T04:19:02.605Z","019ddc9c-954c-7703-8288-76d562fec577","accelerator",{"articleCount":5,"color":6,"createdAt":53,"id":54,"name":55,"slug":55,"updatedAt":53},"2026-04-08T06:47:43.120Z","019d6bd8-caef-76b9-bacd-363e31e6d2a9","accessibility",{"articleCount":57,"color":6,"createdAt":58,"id":59,"name":60,"slug":60,"updatedAt":58},8,"2026-04-17T20:27:50.780Z","019d9d20-e07b-7685-9ebb-fae0b963f243","ai",{"articleCount":48,"color":6,"createdAt":62,"id":63,"name":64,"slug":64,"updatedAt":62},"2026-05-05T00:00:19.031Z","019df56f-8257-752e-a918-cdbb07c32b86","ai-agents",{"articleCount":5,"color":6,"createdAt":66,"id":67,"name":68,"slug":68,"updatedAt":66},"2026-06-01T12:00:14.713Z","019e830e-5378-722b-929b-a57d67bcf605","animation",{"articleCount":70,"color":6,"createdAt":71,"id":72,"name":73,"slug":73,"updatedAt":71},4,"2026-04-08T06:47:55.499Z","019d6bd8-fb46-77ef-a3b6-bd2d30ab8919","api",{"articleCount":57,"color":6,"createdAt":75,"id":41,"name":42,"slug":42,"updatedAt":75},"2026-04-17T19:35:19.300Z",{"articleCount":48,"color":6,"createdAt":77,"id":78,"name":79,"slug":79,"updatedAt":77},"2026-04-23T12:00:11.615Z","019dba36-435e-765d-bfb2-c5be05362c27","astro",{"articleCount":48,"color":6,"createdAt":81,"id":82,"name":83,"slug":83,"updatedAt":81},"2026-06-01T20:00:15.958Z","019e84c5-cc55-7377-9e5d-77240ea8a880","authentication",{"articleCount":48,"color":6,"createdAt":85,"id":86,"name":87,"slug":87,"updatedAt":85},"2026-05-05T00:00:19.020Z","019df56f-824c-7031-9e34-2f47ad139eb6","automation",{"articleCount":48,"color":6,"createdAt":89,"id":90,"name":91,"slug":91,"updatedAt":89},"2026-06-11T16:00:12.019Z","019eb769-9af2-7471-b482-3f1a404f802e","azure",{"articleCount":93,"color":6,"createdAt":94,"id":95,"name":96,"slug":96,"updatedAt":94},2,"2026-04-17T20:27:50.776Z","019d9d20-e077-71cc-a605-8ac2a1566143","backend",{"articleCount":70,"color":6,"createdAt":98,"id":38,"name":39,"slug":39,"updatedAt":98},"2026-04-08T06:47:56.976Z",{"articleCount":48,"color":6,"createdAt":100,"id":101,"name":102,"slug":102,"updatedAt":100},"2026-06-06T00:00:11.711Z","019e9a3a-e5be-74b3-a01a-92c1f9427a2c","beta",{"articleCount":48,"color":6,"createdAt":104,"id":105,"name":106,"slug":106,"updatedAt":104},"2026-06-10T13:53:29.711Z","019eb1cf-3e6e-70f0-a761-0fb9b61d5675","budgeting",{"articleCount":5,"color":6,"createdAt":108,"id":109,"name":110,"slug":110,"updatedAt":108},"2026-06-16T16:11:31.438Z","019ed133-c4ee-70bb-8e21-7dc86e8adee4","bun",{"articleCount":48,"color":6,"createdAt":112,"id":113,"name":114,"slug":114,"updatedAt":112},"2026-05-19T20:00:14.559Z","019e41d3-1ade-77b0-9e4f-e9b97a6361ca","cdn",{"articleCount":5,"color":6,"createdAt":116,"id":117,"name":118,"slug":118,"updatedAt":116},"2026-06-27T16:00:12.237Z","019f09cf-5bcd-751c-8d46-9e123bd784af","clean-code",{"articleCount":5,"color":6,"createdAt":120,"id":121,"name":122,"slug":122,"updatedAt":120},"2026-05-16T18:48:40.777Z","019e321e-8248-75cc-9b69-59c2db6dd846","cli",{"articleCount":48,"color":6,"createdAt":124,"id":125,"name":126,"slug":126,"updatedAt":124},"2026-05-05T00:00:19.014Z","019df56f-8246-747f-be4b-a716863a93ea","cloud-platform",{"articleCount":5,"color":6,"createdAt":128,"id":129,"name":130,"slug":130,"updatedAt":128},"2026-06-16T16:11:31.289Z","019ed133-c458-74d8-a5c9-654f77837e7c","cloudflare",{"articleCount":5,"color":6,"createdAt":132,"id":133,"name":134,"slug":134,"updatedAt":132},"2026-07-27T18:11:45.304Z","019fa4c6-93c3-76ea-baa3-7d5fe541ac5b","cms",{"articleCount":5,"color":6,"createdAt":136,"id":137,"name":138,"slug":138,"updatedAt":136},"2026-04-30T04:19:02.045Z","019ddc9c-931c-743d-a1cb-e4449630fe47","collaboration",{"articleCount":5,"color":6,"createdAt":140,"id":141,"name":142,"slug":142,"updatedAt":140},"2026-06-10T13:53:29.567Z","019eb1cf-3dde-776d-9398-4863764f9ac3","community",{"articleCount":5,"color":6,"createdAt":144,"id":145,"name":146,"slug":146,"updatedAt":144},"2026-05-06T16:00:17.128Z","019dfe04-bee8-7384-bc58-a712f677807c","comparison",{"articleCount":5,"color":6,"createdAt":148,"id":149,"name":150,"slug":150,"updatedAt":148},"2026-05-14T12:00:21.354Z","019e265b-f569-71d8-a02a-a17ec8180644","component-design",{"articleCount":5,"color":6,"createdAt":152,"id":153,"name":154,"slug":154,"updatedAt":152},"2026-07-18T20:00:18.730Z","019f76d0-bb29-72d6-8d0b-05ffd1d3c8ed","composables",{"articleCount":70,"color":6,"createdAt":156,"id":35,"name":36,"slug":36,"updatedAt":156},"2026-04-08T06:47:42.915Z",{"articleCount":5,"color":6,"createdAt":158,"id":159,"name":160,"slug":160,"updatedAt":158},"2026-06-27T12:00:13.113Z","019f08f3-a538-74ed-82c5-038edce7100a","copilot",{"articleCount":48,"color":6,"createdAt":162,"id":163,"name":164,"slug":164,"updatedAt":162},"2026-04-25T12:00:12.674Z","019dc482-ff81-73ac-9b1c-6ad47f0afde0","data-management",{"articleCount":48,"color":6,"createdAt":166,"id":167,"name":168,"slug":168,"updatedAt":166},"2026-06-04T20:00:17.367Z","019e9438-e5d7-731f-bf47-8dcd86c6655c","data-privacy",{"articleCount":5,"color":6,"createdAt":170,"id":171,"name":172,"slug":172,"updatedAt":170},"2026-05-05T12:00:17.083Z","019df802-a8bb-775a-b843-93d883c7dfc5","data-science",{"articleCount":48,"color":6,"createdAt":174,"id":175,"name":176,"slug":176,"updatedAt":174},"2026-06-11T16:00:12.028Z","019eb769-9afb-7709-8a67-2a12f5e557c7","deepseek",{"articleCount":5,"color":6,"createdAt":178,"id":179,"name":180,"slug":180,"updatedAt":178},"2026-05-25T08:00:12.834Z","019e5e26-0e21-7366-87c7-0b1334180b0a","dependency-cruiser",{"articleCount":5,"color":6,"createdAt":182,"id":183,"name":184,"slug":184,"updatedAt":182},"2026-04-18T04:30:00.710Z","019d9eda-5005-7329-a463-189572e25635","deployment",{"articleCount":93,"color":6,"createdAt":186,"id":187,"name":188,"slug":188,"updatedAt":186},"2026-04-21T12:00:11.373Z","019dafe9-8a6d-7218-81f1-37052cbe9b78","development",{"articleCount":5,"color":6,"createdAt":190,"id":191,"name":192,"slug":192,"updatedAt":190},"2026-06-29T08:00:12.101Z","019f1264-9f44-762d-b5fd-837839fdc586","devtools",{"articleCount":48,"color":6,"createdAt":194,"id":195,"name":196,"slug":196,"updatedAt":194},"2026-05-29T20:00:13.197Z","019e7552-ad8c-731f-ad8b-49253ed0e1b9","docker",{"articleCount":5,"color":6,"createdAt":198,"id":199,"name":200,"slug":200,"updatedAt":198},"2026-06-27T12:00:13.081Z","019f08f3-a518-7607-aa8c-782b4f10c2ed","documentation",{"articleCount":5,"color":6,"createdAt":202,"id":203,"name":204,"slug":204,"updatedAt":202},"2026-04-30T04:19:02.055Z","019ddc9c-9327-744f-a2da-31b64c7b6ba4","editor",{"articleCount":5,"color":6,"createdAt":206,"id":7,"name":8,"slug":8,"updatedAt":206},"2026-07-06T12:00:24.261Z",{"articleCount":48,"color":6,"createdAt":208,"id":209,"name":210,"slug":210,"updatedAt":208},"2026-05-02T00:00:23.123Z","019de5fc-7e52-740a-807c-d322c373865b","firewall",{"articleCount":5,"color":6,"createdAt":212,"id":213,"name":214,"slug":214,"updatedAt":212},"2026-05-06T16:00:17.134Z","019dfe04-beee-7481-b8e7-4034640e840a","frameworks",{"articleCount":48,"color":6,"createdAt":216,"id":217,"name":218,"slug":218,"updatedAt":216},"2026-04-08T06:47:56.883Z","019d6bd9-00b2-7199-8e88-2530ef258032","generics",{"articleCount":5,"color":6,"createdAt":220,"id":221,"name":222,"slug":222,"updatedAt":220},"2026-07-27T18:11:45.390Z","019fa4c6-9419-7657-844e-58ec868ed664","git",{"articleCount":93,"color":6,"createdAt":224,"id":225,"name":226,"slug":226,"updatedAt":224},"2026-07-15T00:00:22.207Z","019f6313-12bf-7151-81f2-c8b43b09d979","html",{"articleCount":48,"color":6,"createdAt":228,"id":229,"name":230,"slug":230,"updatedAt":228},"2026-05-06T00:00:17.012Z","019dfa95-d673-71ef-be4a-8761512ffe5c","infrastructure",{"articleCount":5,"color":6,"createdAt":232,"id":233,"name":234,"slug":234,"updatedAt":232},"2026-06-16T16:11:31.264Z","019ed133-c43f-704f-8c1a-fbc299c8a3e5","javascript",{"articleCount":5,"color":6,"createdAt":236,"id":237,"name":238,"slug":238,"updatedAt":236},"2026-07-13T08:00:18.266Z","019f5a7d-bf5a-76e0-903a-c87435cc3e09","lazy-loading",{"articleCount":5,"color":6,"createdAt":240,"id":241,"name":242,"slug":242,"updatedAt":240},"2026-05-11T12:00:19.963Z","019e16e8-dbfa-76d6-bb2d-793aee049186","loading",{"articleCount":48,"color":6,"createdAt":244,"id":245,"name":246,"slug":246,"updatedAt":244},"2026-04-25T12:00:12.682Z","019dc482-ff8a-7698-8af5-95db54a26d6b","local-first",{"articleCount":5,"color":6,"createdAt":248,"id":249,"name":250,"slug":250,"updatedAt":248},"2026-05-14T12:00:21.370Z","019e265b-f579-71cd-84b2-ac385b5225ae","maintainability",{"articleCount":5,"color":6,"createdAt":252,"id":253,"name":254,"slug":254,"updatedAt":252},"2026-05-10T16:00:18.613Z","019e129e-34b4-7107-acfb-27f6b8604eb0","management",{"articleCount":5,"color":6,"createdAt":256,"id":257,"name":258,"slug":258,"updatedAt":256},"2026-06-27T12:00:13.065Z","019f08f3-a508-7334-aa03-12b281698ea8","markdown",{"articleCount":5,"color":6,"createdAt":260,"id":261,"name":262,"slug":262,"updatedAt":260},"2026-07-28T12:00:27.878Z","019fa899-02e6-758e-bdcb-8a4a923507df","mcp",{"articleCount":5,"color":6,"createdAt":264,"id":265,"name":266,"slug":266,"updatedAt":264},"2026-06-17T12:00:12.439Z","019ed574-0a96-7485-9c90-522e4be3e092","meta-tags",{"articleCount":48,"color":6,"createdAt":268,"id":269,"name":270,"slug":270,"updatedAt":268},"2026-05-26T08:00:14.598Z","019e634c-7105-7073-bc86-c32fa0a4401b","microfrontends",{"articleCount":48,"color":6,"createdAt":272,"id":273,"name":274,"slug":274,"updatedAt":272},"2026-05-19T16:00:13.516Z","019e40f7-5ccc-729c-92ba-bcc0aad8a16f","microvm",{"articleCount":48,"color":6,"createdAt":276,"id":277,"name":278,"slug":278,"updatedAt":276},"2026-05-05T00:00:19.025Z","019df56f-8250-768c-a659-b9f524ff902c","multi-tenant",{"articleCount":48,"color":6,"createdAt":280,"id":281,"name":282,"slug":282,"updatedAt":280},"2026-05-08T04:00:17.998Z","019e05be-4c4d-759e-a51e-8ac760f82f6d","nextjs",{"articleCount":5,"color":6,"createdAt":284,"id":285,"name":286,"slug":286,"updatedAt":284},"2026-04-17T19:35:19.293Z","019d9cf0-c9fc-76a0-8c4e-b818a89c3774","nitro",{"articleCount":288,"color":6,"createdAt":289,"id":290,"name":291,"slug":291,"updatedAt":289},27,"2026-04-08T06:47:55.381Z","019d6bd8-fad3-70a9-a74d-ab96e3a2f45d","nuxt",{"articleCount":5,"color":6,"createdAt":293,"id":294,"name":295,"slug":295,"updatedAt":293},"2026-04-30T04:19:02.038Z","019ddc9c-9315-735e-a7e8-8424790e8859","nuxt-ui",{"articleCount":5,"color":6,"createdAt":297,"id":298,"name":299,"slug":299,"updatedAt":297},"2026-06-08T12:00:16.030Z","019ea71a-dc9d-7607-9cfa-df0f31ab5876","observability",{"articleCount":48,"color":6,"createdAt":301,"id":302,"name":303,"slug":303,"updatedAt":301},"2026-05-04T20:00:20.503Z","019df493-ce17-76ed-bd80-2a3914e0f409","open-source",{"articleCount":5,"color":6,"createdAt":305,"id":306,"name":307,"slug":307,"updatedAt":305},"2026-06-08T12:00:16.022Z","019ea71a-dc95-72b8-a7e3-70f9e2ac3710","opentelemetry",{"articleCount":70,"color":6,"createdAt":309,"id":310,"name":311,"slug":311,"updatedAt":309},"2026-05-18T12:00:14.389Z","019e3af5-4a35-705c-8ab1-4404b653e0e8","optimization",{"articleCount":5,"color":6,"createdAt":313,"id":314,"name":315,"slug":315,"updatedAt":313},"2026-05-28T20:00:13.016Z","019e702c-50d7-74eb-8849-8b1cebcf411e","orchestration",{"articleCount":317,"color":6,"createdAt":318,"id":319,"name":320,"slug":320,"updatedAt":318},16,"2026-04-08T06:47:42.920Z","019d6bd8-ca26-775c-b9b5-c3439dbe5789","performance",{"articleCount":5,"color":6,"createdAt":322,"id":323,"name":324,"slug":324,"updatedAt":322},"2026-06-10T13:53:29.575Z","019eb1cf-3de7-7326-87d9-c55ad1c0fa39","personalization",{"articleCount":5,"color":6,"createdAt":326,"id":327,"name":328,"slug":328,"updatedAt":326},"2026-04-17T19:35:19.263Z","019d9cf0-c9de-70b2-9057-76d771c3379e","pinia",{"articleCount":48,"color":6,"createdAt":330,"id":331,"name":332,"slug":332,"updatedAt":330},"2026-05-02T00:00:23.112Z","019de5fc-7e47-7075-8aeb-9e90f7689f57","postgres",{"articleCount":48,"color":6,"createdAt":334,"id":335,"name":336,"slug":336,"updatedAt":334},"2026-05-19T20:00:14.575Z","019e41d3-1aee-70c8-a07c-cec870115d14","pricing",{"articleCount":5,"color":6,"createdAt":338,"id":339,"name":340,"slug":340,"updatedAt":338},"2026-05-10T16:00:18.603Z","019e129e-34aa-723b-a568-45737915c7bf","qa",{"articleCount":5,"color":6,"createdAt":342,"id":343,"name":344,"slug":344,"updatedAt":342},"2026-05-08T04:00:18.013Z","019e05be-4c5c-75ad-8df5-602b3db57983","react",{"articleCount":70,"color":6,"createdAt":346,"id":347,"name":348,"slug":348,"updatedAt":346},"2026-04-20T12:00:11.653Z","019daac3-2f85-7393-b891-9da3891267ca","reactivity",{"articleCount":70,"color":6,"createdAt":350,"id":351,"name":352,"slug":352,"updatedAt":350},"2026-04-17T20:27:50.585Z","019d9d20-dfb9-7041-9973-39c545b33a2d","release",{"articleCount":48,"color":6,"createdAt":354,"id":355,"name":356,"slug":356,"updatedAt":354},"2026-05-26T08:00:14.619Z","019e634c-711a-728f-9b63-20f2c8b37ccb","routing",{"articleCount":48,"color":6,"createdAt":358,"id":359,"name":360,"slug":360,"updatedAt":358},"2026-05-19T16:00:13.509Z","019e40f7-5cc4-72e1-8f8b-692dd29fc716","sandbox",{"articleCount":5,"color":6,"createdAt":362,"id":363,"name":364,"slug":364,"updatedAt":362},"2026-05-14T12:00:21.362Z","019e265b-f571-7677-a537-2f7e96a490bf","scalability",{"articleCount":48,"color":6,"createdAt":366,"id":367,"name":368,"slug":368,"updatedAt":366},"2026-05-04T20:00:20.521Z","019df493-ce28-75e9-93d5-13251407a27b","scanning",{"articleCount":70,"color":6,"createdAt":370,"id":371,"name":372,"slug":372,"updatedAt":370},"2026-04-27T08:00:12.420Z","019dcdf3-fc84-73aa-a0be-6b7196c5a2e9","security",{"articleCount":5,"color":6,"createdAt":374,"id":375,"name":376,"slug":376,"updatedAt":374},"2026-06-17T12:00:12.428Z","019ed574-0a8b-7566-976f-8c281c820ed0","seo",{"articleCount":5,"color":6,"createdAt":378,"id":379,"name":380,"slug":380,"updatedAt":378},"2026-06-17T12:00:12.433Z","019ed574-0a91-74d8-b806-56681bb4b477","sitemap",{"articleCount":5,"color":6,"createdAt":382,"id":383,"name":384,"slug":384,"updatedAt":382},"2026-07-18T16:00:27.576Z","019f75f5-23b8-72eb-a2bf-79dd1fed3863","software-development",{"articleCount":5,"color":6,"createdAt":386,"id":387,"name":388,"slug":388,"updatedAt":386},"2026-04-17T19:35:19.297Z","019d9cf0-ca00-749d-9101-1c63bf62e215","spas",{"articleCount":93,"color":6,"createdAt":390,"id":391,"name":392,"slug":392,"updatedAt":390},"2026-06-03T16:00:12.620Z","019e8e36-bd4b-740d-b23a-81858b24025b","ssg",{"articleCount":394,"color":6,"createdAt":395,"id":396,"name":397,"slug":397,"updatedAt":395},9,"2026-04-08T06:47:43.020Z","019d6bd8-ca89-735e-a52a-ee53a80a77a9","ssr",{"articleCount":48,"color":6,"createdAt":399,"id":400,"name":401,"slug":401,"updatedAt":399},"2026-04-30T04:19:02.613Z","019ddc9c-9555-7544-a3e3-0605d2c1ea82","startup",{"articleCount":70,"color":6,"createdAt":403,"id":404,"name":405,"slug":405,"updatedAt":403},"2026-04-18T12:00:12.027Z","019da076-78fb-706b-9a4c-cee0c989cfff","state-management",{"articleCount":48,"color":6,"createdAt":407,"id":408,"name":409,"slug":409,"updatedAt":407},"2026-06-06T00:00:11.717Z","019e9a3a-e5c5-76d3-86e4-576c151a87b3","storage",{"articleCount":5,"color":6,"createdAt":411,"id":412,"name":413,"slug":413,"updatedAt":411},"2026-06-17T12:00:12.446Z","019ed574-0a9e-7712-8bc5-a0102787fe48","structured-data",{"articleCount":5,"color":6,"createdAt":415,"id":416,"name":417,"slug":417,"updatedAt":415},"2026-05-10T16:00:18.597Z","019e129e-34a4-771a-844d-09a7edefcd64","tdd",{"articleCount":48,"color":6,"createdAt":419,"id":420,"name":421,"slug":421,"updatedAt":419},"2026-06-04T20:00:17.351Z","019e9438-e5c6-7681-8704-897c7b499eb4","terms-of-service",{"articleCount":93,"color":6,"createdAt":423,"id":424,"name":425,"slug":425,"updatedAt":423},"2026-04-09T06:11:45.799Z","019d70de-3c07-76bf-9688-9619e1b0d427","testing",{"articleCount":5,"color":6,"createdAt":427,"id":428,"name":429,"slug":429,"updatedAt":427},"2026-06-16T16:11:31.088Z","019ed133-c390-75bf-8f1a-5c57cd221f14","threejs",{"articleCount":48,"color":6,"createdAt":431,"id":432,"name":433,"slug":433,"updatedAt":431},"2026-05-02T00:00:23.130Z","019de5fc-7e59-7426-8d46-e79e4bcf0d56","tls",{"articleCount":435,"color":6,"createdAt":436,"id":437,"name":438,"slug":438,"updatedAt":436},10,"2026-04-08T06:47:55.591Z","019d6bd8-fba5-743f-8f9f-4e23c0b31581","tutorial",{"articleCount":70,"color":6,"createdAt":440,"id":441,"name":442,"slug":442,"updatedAt":440},"2026-04-08T06:47:56.778Z","019d6bd9-0049-72ba-8cfa-139b1c1b249d","typescript",{"articleCount":444,"color":6,"createdAt":395,"id":445,"name":446,"slug":446,"updatedAt":395},5,"019d6bd8-ca8b-709c-b9a5-77d4910da162","ui-components",{"articleCount":5,"color":6,"createdAt":448,"id":449,"name":450,"slug":450,"updatedAt":448},"2026-05-11T12:00:19.969Z","019e16e8-dc00-714d-911a-a5bf39238587","user-experience",{"articleCount":5,"color":6,"createdAt":452,"id":453,"name":454,"slug":454,"updatedAt":452},"2026-05-18T12:00:14.379Z","019e3af5-4a29-759a-81b0-b6d502b2449e","v-memo",{"articleCount":48,"color":6,"createdAt":456,"id":457,"name":458,"slug":458,"updatedAt":456},"2026-04-30T04:19:02.228Z","019ddc9c-93d3-763e-ad3c-d3ad78642de7","vercel",{"articleCount":5,"color":6,"createdAt":460,"id":461,"name":462,"slug":462,"updatedAt":460},"2026-07-13T08:00:18.274Z","019f5a7d-bf61-746b-a44b-5c0a16ff57d3","video",{"articleCount":70,"color":6,"createdAt":464,"id":465,"name":466,"slug":466,"updatedAt":464},"2026-04-17T19:35:19.289Z","019d9cf0-c9f8-7411-beed-02265d8271db","vite",{"articleCount":5,"color":6,"createdAt":468,"id":469,"name":470,"slug":470,"updatedAt":468},"2026-04-25T18:08:02.132Z","019dc5d3-c054-70e2-bca4-08e2a2b9a096","vitest",{"articleCount":5,"color":6,"createdAt":472,"id":473,"name":474,"slug":474,"updatedAt":472},"2026-06-27T12:00:13.107Z","019f08f3-a532-7049-a02c-c17a4fd99306","vscode",{"articleCount":476,"color":6,"createdAt":477,"id":32,"name":33,"slug":33,"updatedAt":477},32,"2026-04-08T06:47:42.793Z",{"articleCount":5,"color":6,"createdAt":479,"id":480,"name":481,"slug":481,"updatedAt":479},"2026-04-18T12:00:12.007Z","019da076-78e6-76bd-b0d4-4e0597d36378","vue-router",{"articleCount":48,"color":6,"createdAt":483,"id":484,"name":485,"slug":485,"updatedAt":483},"2026-05-04T20:00:20.510Z","019df493-ce1d-7039-811a-ed57bf081d26","vulnerability",{"articleCount":487,"color":6,"createdAt":488,"id":489,"name":490,"slug":490,"updatedAt":488},3,"2026-05-05T12:00:17.078Z","019df802-a8b6-74d2-a0cd-b0509cf502fa","web-development",{"articleCount":487,"color":6,"createdAt":492,"id":493,"name":494,"slug":494,"updatedAt":492},"2026-05-10T16:00:18.576Z","019e129e-3490-7739-a218-5454a8c15d6e","workflow"]