[{"type_of":"article","id":4802845,"title":"Architecting an Executive Developer Portfolio \u0026 Admin CMS with Laravel 11, Vue 3, and Inertia.js","description":"When building a personal portfolio as a Senior Full-Stack Engineer, a standard static template...","readable_publish_date":"Oct 5","slug":"architecting-an-executive-developer-portfolio-admin-cms-with-laravel-11-vue-3-and-inertiajs-1ik0","path":"/kashif_khan_dev/architecting-an-executive-developer-portfolio-admin-cms-with-laravel-11-vue-3-and-inertiajs-1ik0","url":"https://dev.to/kashif_khan_dev/architecting-an-executive-developer-portfolio-admin-cms-with-laravel-11-vue-3-and-inertiajs-1ik0","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-10-05T17:52:38Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":"https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjofwd5hg9lqiwu7kgd1o.png","social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjofwd5hg9lqiwu7kgd1o.png","canonical_url":"https://dev.to/kashif_khan_dev/architecting-an-executive-developer-portfolio-admin-cms-with-laravel-11-vue-3-and-inertiajs-1ik0","created_at":"2026-10-05T17:52:38Z","edited_at":null,"crossposted_at":null,"published_at":"2026-10-05T17:52:38Z","last_comment_at":"2026-10-05T17:52:38Z","reading_time_minutes":2,"tag_list":["laravel","webdev","vue","ai"],"tags":"laravel, webdev, vue, ai","user":{"name":"Kashif Khan","username":"kashif_khan_dev","twitter_username":null,"github_username":null,"user_id":4164545,"website_url":"https://kashif-dev.42web.io/","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4164545%2Fb9ca98f7-5f9c-4bad-989b-9357c2ff8f63.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4164545%2Fb9ca98f7-5f9c-4bad-989b-9357c2ff8f63.jpg"}},{"type_of":"article","id":4803417,"title":"Mastering Web Performance \u0026 Technical SEO: From Zero Crawls to 30K Search Impressions","description":"Web applications built with modern JavaScript frameworks often face a critical hurdle: search engine...","readable_publish_date":"Oct 5","slug":"mastering-web-performance-technical-seo-from-zero-crawls-to-30k-search-impressions-337e","path":"/muhammad_ahmed_6631d2cc13/mastering-web-performance-technical-seo-from-zero-crawls-to-30k-search-impressions-337e","url":"https://dev.to/muhammad_ahmed_6631d2cc13/mastering-web-performance-technical-seo-from-zero-crawls-to-30k-search-impressions-337e","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-10-05T21:36:48Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp3a8idfe36fc4223ifum.png","canonical_url":"https://dev.to/muhammad_ahmed_6631d2cc13/mastering-web-performance-technical-seo-from-zero-crawls-to-30k-search-impressions-337e","created_at":"2026-10-05T21:36:48Z","edited_at":null,"crossposted_at":null,"published_at":"2026-10-05T21:36:48Z","last_comment_at":"2026-10-05T21:36:48Z","reading_time_minutes":1,"tag_list":["webdev","seo","javascript","vue"],"tags":"webdev, seo, javascript, vue","user":{"name":"Muhammad Ahmed","username":"muhammad_ahmed_6631d2cc13","twitter_username":null,"github_username":null,"user_id":4132067,"website_url":null,"profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4132067%2Fe4c3bcc0-8b6b-4c55-b01f-133d9770c894.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4132067%2Fe4c3bcc0-8b6b-4c55-b01f-133d9770c894.jpg"}},{"type_of":"article","id":4800905,"title":"Nuxt createUseFetch: One Typed API Client Without the Wrapper Boilerplate","description":"Nuxt 4.4 added createUseFetch and createUseAsyncData, factories that bake your base URL, auth headers, and error handling into a fully typed useFetch you can call anywhere.","readable_publish_date":"Oct 5","slug":"nuxt-createusefetch-one-typed-api-client-without-the-wrapper-boilerplate-4mj0","path":"/grimicorn/nuxt-createusefetch-one-typed-api-client-without-the-wrapper-boilerplate-4mj0","url":"https://dev.to/grimicorn/nuxt-createusefetch-one-typed-api-client-without-the-wrapper-boilerplate-4mj0","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-10-05T10:12:38Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":"https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdanholloran.me%2Fimages%2Fposts%2Fnuxt-createusefetch-one-typed-api-client-without-the-wrapper-boilerplate.jpg","social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdanholloran.me%2Fimages%2Fposts%2Fnuxt-createusefetch-one-typed-api-client-without-the-wrapper-boilerplate.jpg","canonical_url":"https://danholloran.me/posts/nuxt-createusefetch-one-typed-api-client-without-the-wrapper-boilerplate","created_at":"2026-10-05T10:12:38Z","edited_at":null,"crossposted_at":null,"published_at":"2026-10-05T10:12:38Z","last_comment_at":"2026-10-05T10:12:38Z","reading_time_minutes":3,"tag_list":["nuxt","vue","typescript","webapis"],"tags":"nuxt, vue, typescript, webapis","user":{"name":"Danny Holloran","username":"grimicorn","twitter_username":"grimicorn","github_username":"grimicorn","user_id":3951431,"website_url":"https://danholloran.me","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3951431%2Fab822d20-286b-4190-86ce-c6a0bcbb8319.jpeg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3951431%2Fab822d20-286b-4190-86ce-c6a0bcbb8319.jpeg"}},{"type_of":"article","id":4801747,"title":"Encoding Fixer (Multilingual Mojibake Repair)","description":"Mojibake is one of those bugs that looks like corrupted data even when the bytes are still fine. A...","readable_publish_date":"Oct 5","slug":"encoding-fixer-multilingual-mojibake-repair-4633","path":"/begoodtool/encoding-fixer-multilingual-mojibake-repair-4633","url":"https://dev.to/begoodtool/encoding-fixer-multilingual-mojibake-repair-4633","comments_count":0,"public_reactions_count":7,"collection_id":null,"published_timestamp":"2026-10-05T13:00:03Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":7,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffm5bzh7lga0r1csavzp3.png","canonical_url":"https://dev.to/begoodtool/encoding-fixer-multilingual-mojibake-repair-4633","created_at":"2026-10-05T13:00:03Z","edited_at":null,"crossposted_at":null,"published_at":"2026-10-05T13:00:03Z","last_comment_at":"2026-10-05T13:00:03Z","reading_time_minutes":4,"tag_list":["javascript","vue","unicode"],"tags":"javascript, vue, unicode","user":{"name":"Joe Lin","username":"yuntao_lin","twitter_username":null,"github_username":null,"user_id":4066889,"website_url":"https://begoodtool.com/home/en","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4066889%2Fcbfd5bde-d893-4635-97d5-aea05722cb26.jpeg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4066889%2Fcbfd5bde-d893-4635-97d5-aea05722cb26.jpeg"},"organization":{"name":"BeGoodTool.com","username":"begoodtool","slug":"begoodtool","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14295%2Fd519278f-433a-4dab-9489-447ef51fc6d4.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14295%2Fd519278f-433a-4dab-9489-447ef51fc6d4.jpg"}},{"type_of":"article","id":4788956,"title":"We translated our terminal game into Portuguese. Except the terminal.","description":"DockerLinux is a free game for learning Linux and Docker: a simulated terminal in the browser, 10...","readable_publish_date":"Oct 4","slug":"we-translated-our-terminal-game-into-portuguese-except-the-terminal-2e2f","path":"/dockerlinux/we-translated-our-terminal-game-into-portuguese-except-the-terminal-2e2f","url":"https://dev.to/dockerlinux/we-translated-our-terminal-game-into-portuguese-except-the-terminal-2e2f","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-10-04T12:00:00Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":"https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fltioq5zfubltg4i4f2k1.png","social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fltioq5zfubltg4i4f2k1.png","canonical_url":"https://dev.to/dockerlinux/we-translated-our-terminal-game-into-portuguese-except-the-terminal-2e2f","created_at":"2026-10-02T20:07:10Z","edited_at":null,"crossposted_at":null,"published_at":"2026-10-04T12:00:00Z","last_comment_at":"2026-10-04T12:00:00Z","reading_time_minutes":2,"tag_list":["linux","docker","vue","braziliandevs"],"tags":"linux, docker, vue, braziliandevs","user":{"name":"Dockerlinux","username":"dockerlinux","twitter_username":null,"github_username":null,"user_id":4141846,"website_url":"https://dockerlinux.com","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4141846%2Fc9a4b610-06ba-4cac-88b5-4ca046cc9f6d.png","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4141846%2Fc9a4b610-06ba-4cac-88b5-4ca046cc9f6d.png"}},{"type_of":"article","id":4799598,"title":"Vue defineModel: The v-model Contract, Explained","description":"Vue's defineModel macro replaces the modelValue prop and update:modelValue event with one ref. The exact v-model contract behind it, verified against Vue 3.5.","readable_publish_date":"Oct 5","slug":"vue-definemodel-the-v-model-contract-explained-fc1","path":"/parsajiravand/vue-definemodel-the-v-model-contract-explained-fc1","url":"https://dev.to/parsajiravand/vue-definemodel-the-v-model-contract-explained-fc1","comments_count":0,"public_reactions_count":9,"collection_id":43569,"published_timestamp":"2026-10-05T06:11:01Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":9,"cover_image":"https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fbestpractic.org%2Fmedia%2Fcovers%2Fvue-weekly-definemodel-v-model-contract.png","social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fbestpractic.org%2Fmedia%2Fcovers%2Fvue-weekly-definemodel-v-model-contract.png","canonical_url":"https://bestpractic.org/blog/vue-weekly-definemodel-v-model-contract","created_at":"2026-10-05T06:11:02Z","edited_at":null,"crossposted_at":null,"published_at":"2026-10-05T06:11:01Z","last_comment_at":"2026-10-05T06:11:01Z","reading_time_minutes":11,"tag_list":["vue","javascript","tutorial","webdev"],"tags":"vue, javascript, tutorial, webdev","user":{"name":"Parsa Jiravand","username":"parsajiravand","twitter_username":null,"github_username":null,"user_id":3831018,"website_url":"https://github.com/parsajiravand","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3831018%2Ff09b70fc-3b0d-4ce2-bb7e-d78ee6f7d701.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3831018%2Ff09b70fc-3b0d-4ce2-bb7e-d78ee6f7d701.jpg"}},{"type_of":"article","id":4794923,"title":"Build a Vue 3 Mini App Storefront with Pinia and Telegram Native Invoices","description":"Persist catalog state in Pinia, bind totals to Telegram MainButton, and invoke secure server-generated native invoices.","readable_publish_date":"Oct 4","slug":"build-a-vue-3-mini-app-storefront-with-pinia-and-telegram-native-invoices-1p53","path":"/serhii_a9c08345ac360cf5c8/build-a-vue-3-mini-app-storefront-with-pinia-and-telegram-native-invoices-1p53","url":"https://dev.to/serhii_a9c08345ac360cf5c8/build-a-vue-3-mini-app-storefront-with-pinia-and-telegram-native-invoices-1p53","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-10-04T08:11:28Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6ljf4qhy6poxt4tj2g2s.png","canonical_url":"https://botservice.biz/en/blog/vue-mini-app-pinia-telegram-invoices","created_at":"2026-10-04T08:11:28Z","edited_at":null,"crossposted_at":null,"published_at":"2026-10-04T08:11:28Z","last_comment_at":"2026-10-04T08:11:28Z","reading_time_minutes":7,"tag_list":["vue","javascript","telegram","webdev"],"tags":"vue, javascript, telegram, webdev","user":{"name":"Serhii","username":"serhii_a9c08345ac360cf5c8","twitter_username":null,"github_username":null,"user_id":4103117,"website_url":"https://botservice.biz","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4103117%2Fbad3d9cf-2154-41f3-baab-d150883f5b8b.png","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4103117%2Fbad3d9cf-2154-41f3-baab-d150883f5b8b.png"}},{"type_of":"article","id":4790837,"title":"Nuxt SWR caching can leak one visitor's data to another — 3 traps I reproduced (and the fixes)","description":"Cookie replay, host-shared cache entries and frozen per-visitor HTML — reproduced on Nuxt 4.5.2 / Nitro 2.13.4, with verified fixes.","readable_publish_date":"Oct 3","slug":"nuxt-swr-caching-can-leak-one-visitors-data-to-another-3-traps-i-reproduced-and-the-fixes-456o","path":"/muhammadusama786eng/nuxt-swr-caching-can-leak-one-visitors-data-to-another-3-traps-i-reproduced-and-the-fixes-456o","url":"https://dev.to/muhammadusama786eng/nuxt-swr-caching-can-leak-one-visitors-data-to-another-3-traps-i-reproduced-and-the-fixes-456o","comments_count":1,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-10-03T06:59:13Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjjlbiyk89e7x43galax6.png","canonical_url":"https://dev.to/muhammadusama786eng/nuxt-swr-caching-can-leak-one-visitors-data-to-another-3-traps-i-reproduced-and-the-fixes-456o","created_at":"2026-10-03T06:59:13Z","edited_at":null,"crossposted_at":null,"published_at":"2026-10-03T06:59:13Z","last_comment_at":"2026-10-03T07:11:44Z","reading_time_minutes":3,"tag_list":["nuxt","vue","webdev","performance"],"tags":"nuxt, vue, webdev, performance","user":{"name":"Muhammad Usama","username":"muhammadusama786eng","twitter_username":null,"github_username":"MuhammadUsama786-eng","user_id":4158833,"website_url":null,"profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4158833%2F8b04e07d-f841-4a0a-85e7-fced595d6de3.png","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4158833%2F8b04e07d-f841-4a0a-85e7-fced595d6de3.png"}},{"type_of":"article","id":4782878,"title":"tanstack-fetch 1.5.0 — Vue \u0026 Nuxt helpers for a TanStack Query–ready fetch client","description":"tanstack-fetch 1.5.0 adds tanstack-fetch/vue: createFetchPlugin, useFetch, and useSse for Vue 3 /...","readable_publish_date":"Oct 1","slug":"tanstack-fetch-150-vue-nuxt-helpers-for-a-tanstack-query-ready-fetch-client-52ag","path":"/mwmdgmb/tanstack-fetch-150-vue-nuxt-helpers-for-a-tanstack-query-ready-fetch-client-52ag","url":"https://dev.to/mwmdgmb/tanstack-fetch-150-vue-nuxt-helpers-for-a-tanstack-query-ready-fetch-client-52ag","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-10-01T13:41:18Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyodhvvviu944n1oytl5r.png","canonical_url":"https://dev.to/mwmdgmb/tanstack-fetch-150-vue-nuxt-helpers-for-a-tanstack-query-ready-fetch-client-52ag","created_at":"2026-10-01T13:41:18Z","edited_at":null,"crossposted_at":null,"published_at":"2026-10-01T13:41:18Z","last_comment_at":"2026-10-01T13:41:18Z","reading_time_minutes":1,"tag_list":["vue","nuxt","typescript","opensource"],"tags":"vue, nuxt, typescript, opensource","user":{"name":"mohammad garmabi","username":"mwmdgmb","twitter_username":null,"github_username":"mwmdgmb","user_id":781718,"website_url":null,"profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F781718%2F1fccf28c-7c5a-4354-be61-e10ae82c8368.jpeg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F781718%2F1fccf28c-7c5a-4354-be61-e10ae82c8368.jpeg"}},{"type_of":"article","id":4778918,"title":"From MVP to Production: Building a Small Business Platform Like a Real Product","description":"An architectural case study of designing, building, and deploying a proprietary business platform...","readable_publish_date":"Sep 30","slug":"from-mvp-to-production-building-a-small-business-platform-like-a-real-product-17d5","path":"/overdravila/from-mvp-to-production-building-a-small-business-platform-like-a-real-product-17d5","url":"https://dev.to/overdravila/from-mvp-to-production-building-a-small-business-platform-like-a-real-product-17d5","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-09-30T20:21:33Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":"https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8jful3s1kyfmqtlrkfpo.png","social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8jful3s1kyfmqtlrkfpo.png","canonical_url":"https://dev.to/overdravila/from-mvp-to-production-building-a-small-business-platform-like-a-real-product-17d5","created_at":"2026-09-30T17:45:20Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-30T20:21:33Z","last_comment_at":"2026-09-30T20:21:33Z","reading_time_minutes":17,"tag_list":["architecture","vue","design","csharp"],"tags":"architecture, vue, design, csharp","user":{"name":"Andres Avila Wille","username":"overdravila","twitter_username":"gfoxavila","github_username":"overdravila","user_id":53768,"website_url":null,"profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F53768%2F8c87f479-9c91-4511-8181-f355c515f19a.jpeg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F53768%2F8c87f479-9c91-4511-8181-f355c515f19a.jpeg"}},{"type_of":"article","id":4782672,"title":"Color Contrast Matrix Checker: Turning WCAG Pair Checks into a Readable Grid","description":"Accessibility reviews get repetitive when a design system has four, six, or ten colors. A designer...","readable_publish_date":"Oct 1","slug":"color-contrast-matrix-checker-turning-wcag-pair-checks-into-a-readable-grid-35oo","path":"/begoodtool/color-contrast-matrix-checker-turning-wcag-pair-checks-into-a-readable-grid-35oo","url":"https://dev.to/begoodtool/color-contrast-matrix-checker-turning-wcag-pair-checks-into-a-readable-grid-35oo","comments_count":0,"public_reactions_count":6,"collection_id":null,"published_timestamp":"2026-10-01T13:00:03Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":6,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Figxcgt0wc4wege0x0rua.png","canonical_url":"https://dev.to/begoodtool/color-contrast-matrix-checker-turning-wcag-pair-checks-into-a-readable-grid-35oo","created_at":"2026-10-01T13:00:03Z","edited_at":null,"crossposted_at":null,"published_at":"2026-10-01T13:00:03Z","last_comment_at":"2026-10-01T13:00:03Z","reading_time_minutes":4,"tag_list":["javascript","vue","a11y"],"tags":"javascript, vue, a11y","user":{"name":"Joe Lin","username":"yuntao_lin","twitter_username":null,"github_username":null,"user_id":4066889,"website_url":"https://begoodtool.com/home/en","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4066889%2Fcbfd5bde-d893-4635-97d5-aea05722cb26.jpeg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4066889%2Fcbfd5bde-d893-4635-97d5-aea05722cb26.jpeg"},"organization":{"name":"BeGoodTool.com","username":"begoodtool","slug":"begoodtool","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14295%2Fd519278f-433a-4dab-9489-447ef51fc6d4.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14295%2Fd519278f-433a-4dab-9489-447ef51fc6d4.jpg"}},{"type_of":"article","id":4774896,"title":"Why I Built Solid-Vue JS: File-Based API Routing for Vue + Vite","description":"Quick note: Solid-Vue JS is not SolidJS. It's a Vue + Vite framework. Yes, the names are close, and...","readable_publish_date":"Sep 30","slug":"why-i-built-solid-vue-js-file-based-api-routing-for-vue-vite-4if4","path":"/joni_ilman12/why-i-built-solid-vue-js-file-based-api-routing-for-vue-vite-4if4","url":"https://dev.to/joni_ilman12/why-i-built-solid-vue-js-file-based-api-routing-for-vue-vite-4if4","comments_count":0,"public_reactions_count":1,"collection_id":null,"published_timestamp":"2026-09-30T03:31:45Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":1,"cover_image":"https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsoe72vb1w0av2gw8xwnb.png","social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsoe72vb1w0av2gw8xwnb.png","canonical_url":"https://dev.to/joni_ilman12/why-i-built-solid-vue-js-file-based-api-routing-for-vue-vite-4if4","created_at":"2026-09-30T03:31:45Z","edited_at":"2026-09-30T03:32:50Z","crossposted_at":null,"published_at":"2026-09-30T03:31:45Z","last_comment_at":"2026-09-30T03:31:45Z","reading_time_minutes":3,"tag_list":["vite","vue","webdev","javascript"],"tags":"vite, vue, webdev, javascript","user":{"name":"Joni Ilman Pahmi","username":"joni_ilman12","twitter_username":"solidvue_js","github_username":"solid-vue","user_id":4110455,"website_url":"https://solid-vue.tech/","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4110455%2F7d0dc212-6f1e-4c54-9605-f56377e324b3.png","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4110455%2F7d0dc212-6f1e-4c54-9605-f56377e324b3.png"}},{"type_of":"article","id":4776718,"title":"I Built an Idle Game With an AI Pair Programmer. Here's What Actually Got Hard.","description":"I've spent the last few months building Galactic Idle, a space-empire incremental game, using Vue 3,...","readable_publish_date":"Sep 30","slug":"i-built-an-idle-game-with-an-ai-pair-programmer-heres-what-actually-got-hard-53mc","path":"/renderscribe/i-built-an-idle-game-with-an-ai-pair-programmer-heres-what-actually-got-hard-53mc","url":"https://dev.to/renderscribe/i-built-an-idle-game-with-an-ai-pair-programmer-heres-what-actually-got-hard-53mc","comments_count":0,"public_reactions_count":1,"collection_id":null,"published_timestamp":"2026-09-30T09:55:34Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":1,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbidg8dqshsyqqt1nfwoc.png","canonical_url":"https://dev.to/renderscribe/i-built-an-idle-game-with-an-ai-pair-programmer-heres-what-actually-got-hard-53mc","created_at":"2026-09-30T09:55:34Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-30T09:55:34Z","last_comment_at":"2026-09-30T09:55:34Z","reading_time_minutes":4,"tag_list":["ai","gamedev","programming","vue"],"tags":"ai, gamedev, programming, vue","user":{"name":"Renderscribe","username":"renderscribe","twitter_username":null,"github_username":null,"user_id":4114366,"website_url":"https://renderscribe-interactive.itch.io/","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4114366%2Feb5216a8-6afa-4994-8f32-7d5181fedc7c.png","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4114366%2Feb5216a8-6afa-4994-8f32-7d5181fedc7c.png"}},{"type_of":"article","id":4766327,"title":"Persistent Text Highlighting for Vue 3","description":"I'm happy to share vue3-highlight-text-color, a Vue 3 component for creating, saving, and restoring...","readable_publish_date":"Sep 28","slug":"persistent-text-highlighting-for-vue-3-k7f","path":"/marat_shagidullin_93df625/persistent-text-highlighting-for-vue-3-k7f","url":"https://dev.to/marat_shagidullin_93df625/persistent-text-highlighting-for-vue-3-k7f","comments_count":0,"public_reactions_count":1,"collection_id":null,"published_timestamp":"2026-09-28T18:29:36Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":1,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmhd7xs521vrdrkrzg43s.png","canonical_url":"https://dev.to/marat_shagidullin_93df625/persistent-text-highlighting-for-vue-3-k7f","created_at":"2026-09-28T18:29:36Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-28T18:29:36Z","last_comment_at":"2026-09-28T18:29:36Z","reading_time_minutes":3,"tag_list":["frontend","javascript","typescript","vue"],"tags":"frontend, javascript, typescript, vue","user":{"name":"Marat Shagidullin","username":"marat_shagidullin_93df625","twitter_username":null,"github_username":null,"user_id":4146598,"website_url":null,"profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4146598%2F055b0e76-abbb-4e42-8d9f-ce4c22a7cfb3.png","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4146598%2F055b0e76-abbb-4e42-8d9f-ce4c22a7cfb3.png"}},{"type_of":"article","id":4787471,"title":"Log Multi-Regex Filter Dashboard","description":"I built this after spending too much time switching between Ctrl+F, shell commands, and a spreadsheet...","readable_publish_date":"Oct 2","slug":"log-multi-regex-filter-dashboard-153g","path":"/begoodtool/log-multi-regex-filter-dashboard-153g","url":"https://dev.to/begoodtool/log-multi-regex-filter-dashboard-153g","comments_count":0,"public_reactions_count":9,"collection_id":null,"published_timestamp":"2026-10-02T13:00:03Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":9,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxmo8q5hqpilyi4a6nqh6.png","canonical_url":"https://dev.to/begoodtool/log-multi-regex-filter-dashboard-153g","created_at":"2026-10-02T13:00:03Z","edited_at":null,"crossposted_at":null,"published_at":"2026-10-02T13:00:03Z","last_comment_at":"2026-10-02T13:00:03Z","reading_time_minutes":4,"tag_list":["javascript","vue","webdev"],"tags":"javascript, vue, webdev","user":{"name":"Joe Lin","username":"yuntao_lin","twitter_username":null,"github_username":null,"user_id":4066889,"website_url":"https://begoodtool.com/home/en","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4066889%2Fcbfd5bde-d893-4635-97d5-aea05722cb26.jpeg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4066889%2Fcbfd5bde-d893-4635-97d5-aea05722cb26.jpeg"},"organization":{"name":"BeGoodTool.com","username":"begoodtool","slug":"begoodtool","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14295%2Fd519278f-433a-4dab-9489-447ef51fc6d4.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14295%2Fd519278f-433a-4dab-9489-447ef51fc6d4.jpg"}},{"type_of":"article","id":4752689,"title":"My French homepage showed up in English on Google. A default Nuxt i18n option was the reason.","description":"This week I searched for my own brand on Google, and my French homepage came up with an English title...","readable_publish_date":"Sep 27","slug":"my-french-homepage-showed-up-in-english-on-google-a-default-nuxt-i18n-option-was-the-reason-56c1","path":"/dibodev/my-french-homepage-showed-up-in-english-on-google-a-default-nuxt-i18n-option-was-the-reason-56c1","url":"https://dev.to/dibodev/my-french-homepage-showed-up-in-english-on-google-a-default-nuxt-i18n-option-was-the-reason-56c1","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-09-27T17:10:00Z","language":"en","subforem_id":1,"ai_disclosure_level":"fully_autonomous","ai_disclosure_label":"Fully Autonomous","positive_reactions_count":0,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F68jvj2qqu3p5z58y5dqf.png","canonical_url":"https://dev.to/dibodev/my-french-homepage-showed-up-in-english-on-google-a-default-nuxt-i18n-option-was-the-reason-56c1","created_at":"2026-09-26T22:58:32Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-27T17:10:00Z","last_comment_at":"2026-09-27T17:10:00Z","reading_time_minutes":3,"tag_list":["nuxt","vue","seo","i18n"],"tags":"nuxt, vue, seo, i18n","user":{"name":"Léo Guillaume (Dibodev)","username":"dibodev","twitter_username":null,"github_username":null,"user_id":4083948,"website_url":"https://dibodev.fr","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4083948%2F811962fa-9a33-43e6-b381-b1d09afe1005.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4083948%2F811962fa-9a33-43e6-b381-b1d09afe1005.jpg"}},{"type_of":"article","id":4744387,"title":"Your API works in curl but not in the browser — that's CORS","description":"You built an API. You tested it with curl and every endpoint answered perfectly. Then you pointed a...","readable_publish_date":"Sep 25","slug":"your-api-works-in-curl-but-not-in-the-browser-thats-cors-4h4m","path":"/techtz_academy_8b392d34d8/your-api-works-in-curl-but-not-in-the-browser-thats-cors-4h4m","url":"https://dev.to/techtz_academy_8b392d34d8/your-api-works-in-curl-but-not-in-the-browser-thats-cors-4h4m","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-09-25T19:47:05Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":"https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fquzxv0x47b0e10pcbw6n.png","social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fquzxv0x47b0e10pcbw6n.png","canonical_url":"https://dev.to/techtz_academy_8b392d34d8/your-api-works-in-curl-but-not-in-the-browser-thats-cors-4h4m","created_at":"2026-09-25T17:54:52Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-25T19:47:05Z","last_comment_at":"2026-09-25T19:47:05Z","reading_time_minutes":5,"tag_list":["go","webdev","vue","beginners"],"tags":"go, webdev, vue, beginners","user":{"name":"TechTz Academy","username":"techtz_academy_8b392d34d8","twitter_username":null,"github_username":null,"user_id":4141896,"website_url":null,"profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4141896%2Fa46616a5-61fb-4c3a-bee3-2087ef520232.png","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4141896%2Fa46616a5-61fb-4c3a-bee3-2087ef520232.png"}},{"type_of":"article","id":4742869,"title":"How I Built and Published a Vue 3 Starter Kit CLI","description":"A step-by-step breakdown of building create-vue-starter-with-test — from bootstrapping a Vue app to...","readable_publish_date":"Sep 25","slug":"how-i-built-and-published-a-vue-3-starter-kit-cli-28gc","path":"/hdjerry/how-i-built-and-published-a-vue-3-starter-kit-cli-28gc","url":"https://dev.to/hdjerry/how-i-built-and-published-a-vue-3-starter-kit-cli-28gc","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-09-25T13:19:01Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":"https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F93ot59nh8phbh8efkpvp.png","social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F93ot59nh8phbh8efkpvp.png","canonical_url":"https://dev.to/hdjerry/how-i-built-and-published-a-vue-3-starter-kit-cli-28gc","created_at":"2026-09-25T13:19:02Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-25T13:19:01Z","last_comment_at":"2026-09-25T13:19:01Z","reading_time_minutes":8,"tag_list":["vue","opensource","frontend","typescript"],"tags":"vue, opensource, frontend, typescript","user":{"name":"Jerry Hogan","username":"hdjerry","twitter_username":null,"github_username":"hdJerry","user_id":267092,"website_url":null,"profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F267092%2F59aec1e1-108d-4408-b108-509bba250c5e.png","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F267092%2F59aec1e1-108d-4408-b108-509bba250c5e.png"}},{"type_of":"article","id":4771617,"title":"Creator Audio Pre-Publish Health Check: Why LUFS Is Only One Warning","description":"Before publishing a video or podcast, I care less about whether the waveform looks “big” than whether...","readable_publish_date":"Sep 29","slug":"creator-audio-pre-publish-health-check-why-lufs-is-only-one-warning-2ojk","path":"/begoodtool/creator-audio-pre-publish-health-check-why-lufs-is-only-one-warning-2ojk","url":"https://dev.to/begoodtool/creator-audio-pre-publish-health-check-why-lufs-is-only-one-warning-2ojk","comments_count":0,"public_reactions_count":7,"collection_id":null,"published_timestamp":"2026-09-29T13:00:04Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":7,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl2tbyzzkszcpcnhuwkwx.png","canonical_url":"https://dev.to/begoodtool/creator-audio-pre-publish-health-check-why-lufs-is-only-one-warning-2ojk","created_at":"2026-09-29T13:00:04Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-29T13:00:04Z","last_comment_at":"2026-09-29T13:00:04Z","reading_time_minutes":4,"tag_list":["javascript","vue","webdev"],"tags":"javascript, vue, webdev","user":{"name":"Joe Lin","username":"yuntao_lin","twitter_username":null,"github_username":null,"user_id":4066889,"website_url":"https://begoodtool.com/home/en","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4066889%2Fcbfd5bde-d893-4635-97d5-aea05722cb26.jpeg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4066889%2Fcbfd5bde-d893-4635-97d5-aea05722cb26.jpeg"},"organization":{"name":"BeGoodTool.com","username":"begoodtool","slug":"begoodtool","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14295%2Fd519278f-433a-4dab-9489-447ef51fc6d4.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14295%2Fd519278f-433a-4dab-9489-447ef51fc6d4.jpg"}},{"type_of":"article","id":4787372,"title":"A Free Dark-Themed Restaurant Website Template","description":"I came across Aurel Brasserie, a free HTML template that might be useful if you're building a...","readable_publish_date":"Oct 2","slug":"a-free-dark-themed-restaurant-website-template-jln","path":"/harsh_sharma_4e103c006e92/a-free-dark-themed-restaurant-website-template-jln","url":"https://dev.to/harsh_sharma_4e103c006e92/a-free-dark-themed-restaurant-website-template-jln","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-10-02T12:30:41Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F49ti8xyk0qwrr4el4sgk.png","canonical_url":"https://dev.to/harsh_sharma_4e103c006e92/a-free-dark-themed-restaurant-website-template-jln","created_at":"2026-10-02T12:30:41Z","edited_at":null,"crossposted_at":null,"published_at":"2026-10-02T12:30:41Z","last_comment_at":"2026-10-02T12:30:41Z","reading_time_minutes":1,"tag_list":["webdesign","react","vue","resume"],"tags":"webdesign, react, vue, resume","user":{"name":"Harsh Sharma","username":"harsh_sharma_4e103c006e92","twitter_username":null,"github_username":null,"user_id":4122007,"website_url":null,"profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4122007%2Ffb91f4c8-f9db-4a52-84a9-6fece1a44b58.png","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4122007%2Ffb91f4c8-f9db-4a52-84a9-6fece1a44b58.png"}},{"type_of":"article","id":4735046,"title":"Vue Catalog Mini App with Pinia Cart and Telegram Checkout","description":"A complete guide to building a product catalog mini app in Vue, persisting the shopping cart via Pinia and localStorage, and completing checkout through either an inline Telegram bot invoice or an ext","readable_publish_date":"Sep 24","slug":"vue-catalog-mini-app-with-pinia-cart-and-telegram-checkout-3kdg","path":"/serhii_a9c08345ac360cf5c8/vue-catalog-mini-app-with-pinia-cart-and-telegram-checkout-3kdg","url":"https://dev.to/serhii_a9c08345ac360cf5c8/vue-catalog-mini-app-with-pinia-cart-and-telegram-checkout-3kdg","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-09-24T16:00:53Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fybcmsbiez2pjumi81iry.png","canonical_url":"https://botservice.biz/en/blog/vue-catalog-miniapp","created_at":"2026-09-24T16:00:53Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-24T16:00:53Z","last_comment_at":"2026-09-24T16:00:53Z","reading_time_minutes":6,"tag_list":["vue","telegram","miniapp","pinia"],"tags":"vue, telegram, miniapp, pinia","user":{"name":"Serhii","username":"serhii_a9c08345ac360cf5c8","twitter_username":null,"github_username":null,"user_id":4103117,"website_url":"https://botservice.biz","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4103117%2Fbad3d9cf-2154-41f3-baab-d150883f5b8b.png","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4103117%2Fbad3d9cf-2154-41f3-baab-d150883f5b8b.png"}},{"type_of":"article","id":4732563,"title":"Texaryn: one JSON Schema, rendered in React, Vue or a web component","description":"Why I built Texaryn after maintaining AJSF, how its headless runtime works, and how the same JSON Schema form renders in React, Vue and a web component.","readable_publish_date":"Sep 24","slug":"texaryn-one-json-schema-rendered-in-react-vue-or-a-web-component-85c","path":"/hamzahamidi/texaryn-one-json-schema-rendered-in-react-vue-or-a-web-component-85c","url":"https://dev.to/hamzahamidi/texaryn-one-json-schema-rendered-in-react-vue-or-a-web-component-85c","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-09-24T10:06:45Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwbx8k36dyeeaexn8khx0.png","canonical_url":"https://hamidihamza.com/notes/texaryn-json-schema-forms/","created_at":"2026-09-24T10:06:45Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-24T10:06:45Z","last_comment_at":"2026-09-24T10:06:45Z","reading_time_minutes":9,"tag_list":["react","vue","typescript","webcomponents"],"tags":"react, vue, typescript, webcomponents","user":{"name":"Hamza Hamidi","username":"hamzahamidi","twitter_username":null,"github_username":"hamzahamidi","user_id":138712,"website_url":"https://hamidihamza.com","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F138712%2F05b76b9e-041e-4d35-a6e1-2e6e96307f63.jpeg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F138712%2F05b76b9e-041e-4d35-a6e1-2e6e96307f63.jpeg"}},{"type_of":"article","id":4730743,"title":"Integrate Telegram WebApp in Vue 3: Theme, ViewportStable, and Secure Data Transfer","description":"Step‑by‑step guide to embed Telegram WebApp JS in a Vue 3 component, apply theme, enable viewportStable, send data via sendData, and validate initData on a PHP backend.","readable_publish_date":"Sep 24","slug":"integrate-telegram-webapp-in-vue-3-theme-viewportstable-and-secure-data-transfer-21gl","path":"/serhii_a9c08345ac360cf5c8/integrate-telegram-webapp-in-vue-3-theme-viewportstable-and-secure-data-transfer-21gl","url":"https://dev.to/serhii_a9c08345ac360cf5c8/integrate-telegram-webapp-in-vue-3-theme-viewportstable-and-secure-data-transfer-21gl","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-09-24T07:02:57Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftbbsovi2vfl1ejda70yj.png","canonical_url":"https://botservice.biz/en/blog/integrate-telegram-webapp-vue3-theme-viewportstabl","created_at":"2026-09-24T07:02:57Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-24T07:02:57Z","last_comment_at":"2026-09-24T07:02:57Z","reading_time_minutes":3,"tag_list":["vue","telegram","javascript"],"tags":"vue, telegram, javascript","user":{"name":"Serhii","username":"serhii_a9c08345ac360cf5c8","twitter_username":null,"github_username":null,"user_id":4103117,"website_url":"https://botservice.biz","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4103117%2Fbad3d9cf-2154-41f3-baab-d150883f5b8b.png","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4103117%2Fbad3d9cf-2154-41f3-baab-d150883f5b8b.png"}},{"type_of":"article","id":4726771,"title":"Mirobot Simulator — A 6-DOF Robot Arm Simulator Built with Vue, Electron, and Three.js","description":"Credits: This simulator is based on the WLKATA Mirobot 6-DOF robotic arm platform. Original robot...","readable_publish_date":"Sep 23","slug":"mirobot-simulator-a-6-dof-robot-arm-simulator-built-with-vue-electron-and-threejs-g6k","path":"/timor2542/mirobot-simulator-a-6-dof-robot-arm-simulator-built-with-vue-electron-and-threejs-g6k","url":"https://dev.to/timor2542/mirobot-simulator-a-6-dof-robot-arm-simulator-built-with-vue-electron-and-threejs-g6k","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-09-23T16:49:00Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpw6ebrp7gf1m6r8jdgql.png","canonical_url":"https://dev.to/timor2542/mirobot-simulator-a-6-dof-robot-arm-simulator-built-with-vue-electron-and-threejs-g6k","created_at":"2026-09-23T16:46:46Z","edited_at":"2026-09-23T16:49:51Z","crossposted_at":null,"published_at":"2026-09-23T16:49:00Z","last_comment_at":"2026-09-23T16:49:00Z","reading_time_minutes":2,"tag_list":["javascript","robotics","softwaredevelopment","vue"],"tags":"javascript, robotics, softwaredevelopment, vue","user":{"name":"Krittamet Thawong","username":"timor2542","twitter_username":null,"github_username":"timor2542","user_id":1513686,"website_url":null,"profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1513686%2F67fcba31-04ec-4481-9357-96a3dd207419.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1513686%2F67fcba31-04ec-4481-9357-96a3dd207419.jpg"}},{"type_of":"article","id":4725362,"title":"Vue 3 image upload, crop, and adjustment in one component?","description":"There are plenty of excellent libraries for cropping and processing images. But I kept running into...","readable_publish_date":"Sep 23","slug":"vue-3-image-upload-crop-and-adjustment-in-one-component-5dh1","path":"/dixipro/vue-3-image-upload-crop-and-adjustment-in-one-component-5dh1","url":"https://dev.to/dixipro/vue-3-image-upload-crop-and-adjustment-in-one-component-5dh1","comments_count":0,"public_reactions_count":2,"collection_id":null,"published_timestamp":"2026-09-23T13:02:13Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":2,"cover_image":"https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4oun8lb4yu7xcdhql2et.png","social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4oun8lb4yu7xcdhql2et.png","canonical_url":"https://dev.to/dixipro/vue-3-image-upload-crop-and-adjustment-in-one-component-5dh1","created_at":"2026-09-23T13:02:13Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-23T13:02:13Z","last_comment_at":"2026-09-23T13:02:13Z","reading_time_minutes":1,"tag_list":["frontend","javascript","showdev","vue"],"tags":"frontend, javascript, showdev, vue","user":{"name":"M K","username":"dixipro","twitter_username":null,"github_username":null,"user_id":4139524,"website_url":null,"profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4139524%2Ffa3ec5eb-132c-4c8b-a5d5-73869c4b5964.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4139524%2Ffa3ec5eb-132c-4c8b-a5d5-73869c4b5964.jpg"},"flare_tag":{"name":"showdev","bg_color_hex":"#091b47","text_color_hex":"#b2ffe1"}},{"type_of":"article","id":4713052,"title":"Next.js 14 or Vue 3 + Vite? I Built the Same Game Site MVP Both Ways and Compared Them for 3 Days","description":"TL;DR   I ended up choosing a hybrid: Next.js 14 for static content pages + a separately...","readable_publish_date":"Sep 22","slug":"nextjs-14-or-vue-3-vite-i-built-the-same-game-site-mvp-both-ways-and-compared-them-for-3-days-e7c","path":"/no_momo/nextjs-14-or-vue-3-vite-i-built-the-same-game-site-mvp-both-ways-and-compared-them-for-3-days-e7c","url":"https://dev.to/no_momo/nextjs-14-or-vue-3-vite-i-built-the-same-game-site-mvp-both-ways-and-compared-them-for-3-days-e7c","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-09-22T06:51:03Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":"https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbechm3speefs4wchaxyq.jpg","social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbechm3speefs4wchaxyq.jpg","canonical_url":"https://dev.to/no_momo/nextjs-14-or-vue-3-vite-i-built-the-same-game-site-mvp-both-ways-and-compared-them-for-3-days-e7c","created_at":"2026-09-22T06:51:03Z","edited_at":"2026-09-22T07:58:02Z","crossposted_at":null,"published_at":"2026-09-22T06:51:03Z","last_comment_at":"2026-09-22T06:51:03Z","reading_time_minutes":7,"tag_list":["nextjs","vue","webdev","gamedev"],"tags":"nextjs, vue, webdev, gamedev","user":{"name":"no momo","username":"no_momo","twitter_username":null,"github_username":null,"user_id":3005873,"website_url":"https://www.playfiddlebops.com","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3005873%2F0b125c4b-d188-4e28-962e-1105306c443a.jpeg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3005873%2F0b125c4b-d188-4e28-962e-1105306c443a.jpeg"}},{"type_of":"article","id":4764952,"title":"How to Resize PDF Pages in the Browser with Vue 3 and pdf-lib","description":"Resizing a PDF — changing page dimensions from Letter to A4, or scaling content to fit a target size...","readable_publish_date":"Sep 28","slug":"how-to-resize-pdf-pages-in-the-browser-with-vue-3-and-pdf-lib-450p","path":"/sunshey/how-to-resize-pdf-pages-in-the-browser-with-vue-3-and-pdf-lib-450p","url":"https://dev.to/sunshey/how-to-resize-pdf-pages-in-the-browser-with-vue-3-and-pdf-lib-450p","comments_count":0,"public_reactions_count":1,"collection_id":null,"published_timestamp":"2026-09-28T14:49:08Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":1,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo9m62d7anhgzno3pprjl.png","canonical_url":"https://dev.to/sunshey/how-to-resize-pdf-pages-in-the-browser-with-vue-3-and-pdf-lib-450p","created_at":"2026-09-28T14:49:08Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-28T14:49:08Z","last_comment_at":"2026-09-28T14:49:08Z","reading_time_minutes":4,"tag_list":["webdev","pdf","javascript","vue"],"tags":"webdev, pdf, javascript, vue","user":{"name":"sunshey","username":"sunshey","twitter_username":null,"github_username":"sunshey","user_id":3960024,"website_url":"https://en.sotool.top","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3960024%2F275eb34f-65b0-4b9d-b739-824cfbf6c2cb.png","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3960024%2F275eb34f-65b0-4b9d-b739-824cfbf6c2cb.png"}},{"type_of":"article","id":4718890,"title":"Vue Composables: The Shared State Trap (+ Cheat Sheet)","description":"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.","readable_publish_date":"Sep 22","slug":"vue-composables-the-shared-state-trap-cheat-sheet-37ia","path":"/parsajiravand/vue-composables-the-shared-state-trap-cheat-sheet-37ia","url":"https://dev.to/parsajiravand/vue-composables-the-shared-state-trap-cheat-sheet-37ia","comments_count":0,"public_reactions_count":8,"collection_id":43569,"published_timestamp":"2026-09-22T19:37:11Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":8,"cover_image":"https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fbestpractic.org%2Fmedia%2Fcovers%2Fvue-weekly-composables-shared-state-trap.png","social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fbestpractic.org%2Fmedia%2Fcovers%2Fvue-weekly-composables-shared-state-trap.png","canonical_url":"https://bestpractic.org/blog/vue-weekly-composables-shared-state-trap","created_at":"2026-09-22T19:37:11Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-22T19:37:11Z","last_comment_at":"2026-09-22T19:37:11Z","reading_time_minutes":11,"tag_list":["vue","javascript","tutorial","webdev"],"tags":"vue, javascript, tutorial, webdev","user":{"name":"Parsa Jiravand","username":"parsajiravand","twitter_username":null,"github_username":null,"user_id":3831018,"website_url":"https://github.com/parsajiravand","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3831018%2Ff09b70fc-3b0d-4ce2-bb7e-d78ee6f7d701.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3831018%2Ff09b70fc-3b0d-4ce2-bb7e-d78ee6f7d701.jpg"}},{"type_of":"article","id":4699270,"title":"Building a Real-Time Football Live Score \u0026 Standings App with Nuxt 3","description":"Building a high-concurrency sports data platform is no easy task. When we started developing Cocatips...","readable_publish_date":"Sep 20","slug":"building-a-real-time-football-live-score-standings-app-with-nuxt-3-3249","path":"/cocatips/building-a-real-time-football-live-score-standings-app-with-nuxt-3-3249","url":"https://dev.to/cocatips/building-a-real-time-football-live-score-standings-app-with-nuxt-3-3249","comments_count":0,"public_reactions_count":0,"collection_id":null,"published_timestamp":"2026-09-20T10:45:39Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":0,"cover_image":null,"social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffgt0pvta7xu1fh7264xx.png","canonical_url":"https://dev.to/cocatips/building-a-real-time-football-live-score-standings-app-with-nuxt-3-3249","created_at":"2026-09-20T10:45:39Z","edited_at":null,"crossposted_at":null,"published_at":"2026-09-20T10:45:39Z","last_comment_at":"2026-09-20T10:45:39Z","reading_time_minutes":2,"tag_list":["vue","nuxt","webdev","javascript"],"tags":"vue, nuxt, webdev, javascript","user":{"name":"cocatiips","username":"cocatips","twitter_username":"cocatips","github_username":"cocatips","user_id":4133998,"website_url":"https://cocatips.com","profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4133998%2Fb3b99d5d-f0e4-41f9-8502-85408168f352.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4133998%2Fb3b99d5d-f0e4-41f9-8502-85408168f352.jpg"}},{"type_of":"article","id":4791243,"title":"I built a Vue directive that turns your real component into its own skeleton","description":"v-skeleton restyles real content into a matching skeleton with CSS only, so nothing on the page moves. Here's how it works, and what testing it taught me.","readable_publish_date":"Oct 3","slug":"i-built-a-vue-directive-that-turns-your-real-component-into-its-own-skeleton-3853","path":"/navidjaberi/i-built-a-vue-directive-that-turns-your-real-component-into-its-own-skeleton-3853","url":"https://dev.to/navidjaberi/i-built-a-vue-directive-that-turns-your-real-component-into-its-own-skeleton-3853","comments_count":1,"public_reactions_count":1,"collection_id":null,"published_timestamp":"2026-10-03T09:22:13Z","language":"en","subforem_id":1,"ai_disclosure_level":"not_disclosed","ai_disclosure_label":"Not Disclosed","positive_reactions_count":1,"cover_image":"https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmehuhg9tnkz6lxro39d7.png","social_image":"https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmehuhg9tnkz6lxro39d7.png","canonical_url":"https://dev.to/navidjaberi/i-built-a-vue-directive-that-turns-your-real-component-into-its-own-skeleton-3853","created_at":"2026-10-03T09:22:13Z","edited_at":"2026-10-03T09:35:35Z","crossposted_at":null,"published_at":"2026-10-03T09:22:13Z","last_comment_at":"2026-10-04T21:40:39Z","reading_time_minutes":5,"tag_list":["vue","css","javascript","testing"],"tags":"vue, css, javascript, testing","user":{"name":"Navid jaberi","username":"navidjaberi","twitter_username":null,"github_username":"navidjaberi","user_id":4159380,"website_url":null,"profile_image":"https://media2.dev.to/dynamic/image/width=640,height=640,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4159380%2F9436b957-5e35-4c49-bb9c-73a8b1bb900e.jpg","profile_image_90":"https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4159380%2F9436b957-5e35-4c49-bb9c-73a8b1bb900e.jpg"}}]