41554 blogs · [ { "id": "01a0d556-7332-70dc-abce-ae5cc62fa528", "title": "Measuring the back/forward cache with Application Metrics", "url": "https://blog.sentry.io/bfcache-metrics/", "published_at": "2026-09-24T12:00:00+00:00" }, { "id": "01a08732-d171-73f3-b130-5a17c1d29777", "title": "Fixing JavaScript observability, one library at a time", "url": "https://awad.dev/blog/sentry-fixing-javascript-observability/", "published_at": "2026-05-07T12:00:00+00:00" }, { "id": "01a0d556-7332-70dc-abce-ae5cc6c005fd", "title": "Fixing JavaScript observability, one library at a time", "url": "https://blog.sentry.io/fixing-javascript-observability/", "published_at": "2026-05-07T12:00:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f2988d3db2e", "title": "The Curious Case of Vue's Function Props", "url": "https://awad.dev/blog/certificates-dev-curious-case-fn-props/", "published_at": "2025-12-15T12:00:00+00:00" }, { "id": "01a0d556-7332-70dc-abce-ae5cc7b6558d", "title": "The Curious Case of Vue's Function Props", "url": "https://certificates.dev/blog/the-curious-case-of-vues-function-props", "published_at": "2025-12-15T12:00:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f298917c3ae", "title": "Wait for that tick", "url": "https://awad.dev/blog/certificates-dev-wait-for-that-tick/", "published_at": "2025-11-05T12:00:00+00:00" }, { "id": "01a0d556-7332-70dc-abce-ae5cc86f520f", "title": "Wait for that tick", "url": "https://certificates.dev/blog/wait-for-that-tick", "published_at": "2025-11-05T12:00:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f2989c09aab", "title": "Falling With Style", "url": "https://awad.dev/blog/certificates-dev-falling-with-style/", "published_at": "2025-09-30T12:00:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f2989e8a048", "title": "Vue.js Magical Reactivity Has Some Quirks", "url": "https://awad.dev/blog/certificates-dev-vue-magical-reactivity-quirks/", "published_at": "2025-09-30T12:00:00+00:00" }, { "id": "01a0d556-7332-70dc-abce-ae5cc94437e1", "title": "Falling With Style", "url": "https://certificates.dev/blog/falling-with-style", "published_at": "2025-09-30T12:00:00+00:00" }, { "id": "01a0d556-7332-70dc-abce-ae5cc9c85aea", "title": "Vue.js Magical Reactivity Has Some Quirks", "url": "https://certificates.dev/blog/vues-magical-reactivity-has-some-quirks", "published_at": "2025-09-30T12:00:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f2989f90da6", "title": "Just Use useTemplateRef for Template Refs", "url": "https://awad.dev/blog/certificates-dev-use-template-refs/", "published_at": "2025-09-10T12:00:00+00:00" }, { "id": "01a0d556-7332-70dc-abce-ae5cc9e408dc", "title": "Just Use useTemplateRef for Template Refs", "url": "https://certificates.dev/blog/just-use-usetemplateref-for-template-refs", "published_at": "2025-09-10T12:00:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f298a0c147a", "title": "Getting Started With Provide/Inject In Vue.js", "url": "https://awad.dev/blog/certificates-dev-provide-inject-getting-started/", "published_at": "2025-07-15T12:00:00+00:00" }, { "id": "01a0d556-7332-70dc-abce-ae5ccaafac4c", "title": "Getting Started With Provide/Inject In Vue.js", "url": "https://certificates.dev/blog/getting-started-with-provideinject-in-vuejs", "published_at": "2025-07-15T12:00:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f298afab7b0", "title": "Understanding Vue.js Directives", "url": "https://awad.dev/blog/certificates-dev-understanding-directives/", "published_at": "2025-07-09T11:00:00+00:00" }, { "id": "01a0d556-7332-70dc-abce-ae5ccb04c041", "title": "Understanding Vue.js Directives", "url": "https://certificates.dev/blog/understanding-vuejs-directives", "published_at": "2025-07-09T11:00:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f298bd84684", "title": "Handling Async Components' loading errors", "url": "https://awad.dev/blog/handling-async-component-loading-errors/", "published_at": "2024-05-06T11:00:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f298c8d92f0", "title": "Fix Your Annoying Popups with the CloseWatcher API", "url": "https://awad.dev/blog/fix-your-annoying-popups-with-the-closewatcher-api/", "published_at": "2023-12-31T17:00:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f298d3eb01e", "title": "Better Vue.js inputs with Generics: The Select", "url": "https://awad.dev/blog/better-inputs-with-generics-select/", "published_at": "2023-12-05T03:00:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f298d7e6793", "title": "Three ways to expose internal Vue components API", "url": "https://awad.dev/blog/three-ways-to-expose-vue-component-api/", "published_at": "2023-05-02T01:30:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f298e568131", "title": "Reducing component noise with Composition API", "url": "https://awad.dev/blog/reducing-component-noise-with-composition-api/", "published_at": "2023-04-12T17:12:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f298e590a3a", "title": "Juggling Vue.js Refs", "url": "https://awad.dev/blog/juggling-refs-around/", "published_at": "2022-11-08T12:00:00+00:00" }, { "id": "01a08732-d172-73c0-ac35-6f298ee28e32", "title": "Building Pinia Stores from Composition API", "url": "https://awad.dev/blog/build-pinia-stores-from-composition-api/", "published_at": "2022-08-10T20:40:00+00:00" }, { "id": "01a08732-d173-7158-a677-87aec57bea2c", "title": "Generically Typed Vue Components with Composition API", "url": "https://awad.dev/blog/generic-type-components-with-composition-api/", "published_at": "2022-05-09T17:00:00+00:00" }, { "id": "01a08732-d173-7158-a677-87aec621232d", "title": "Making the most out of Vue.js Injections", "url": "https://awad.dev/blog/making-the-most-out-of-vuejs-injections/", "published_at": "2021-10-25T11:00:00+00:00" }, { "id": "01a08732-d173-7158-a677-87aec6b1b12b", "title": "Conditional Vue.js Compositions", "url": "https://awad.dev/blog/conditional-vuejs-compositions/", "published_at": "2021-10-24T17:30:00+00:00" }, { "id": "01a08732-d173-7158-a677-87aec6e010b7", "title": "My 5 favorite Vue.js composables", "url": "https://awad.dev/blog/my-favorite-5-vuejs-composables/", "published_at": "2021-08-31T12:30:00+00:00" }, { "id": "01a08732-d173-7158-a677-87aec70f523b", "title": "Generically Typed Vue.js Components", "url": "https://awad.dev/blog/generically-typed-vue-components/", "published_at": "2021-08-12T17:00:00+00:00" }, { "id": "01a08732-d173-7158-a677-87aec7df67e1", "title": "Invalidating Computed with The Composition API", "url": "https://awad.dev/blog/invalidating-computed-props/", "published_at": "2021-01-31T20:15:00+00:00" }, { "id": "01a08732-d173-7158-a677-87aec87e086f", "title": "Caching Vue Refs", "url": "https://awad.dev/blog/caching-vue-refs/", "published_at": "2021-01-17T17:00:00+00:00" }, { "id": "01a08732-d173-7158-a677-87aec8893a82", "title": "Type-safe Vue.js Injections", "url": "https://awad.dev/blog/type-safe-provide-inject/", "published_at": "2020-12-23T00:00:00+00:00" }, { "id": "01a08732-d173-7158-a677-87aec88ff266", "title": "Language Aware Nuxt.js Routing", "url": "https://awad.dev/blog/language-aware-nuxt-routing/", "published_at": "2020-12-11T00:00:00+00:00" }, { "id": "01a08732-d173-7158-a677-87aec984cb5a", "title": "Non-reactive Objects in Vue Composition API", "url": "https://awad.dev/blog/vue-composition-api-non-reactive-objects/", "published_at": "2020-10-28T00:00:00+00:00" }, { "id": "01a08732-d173-7158-a677-87aec9b280ff", "title": "The case for HOC vs The Composition API", "url": "https://awad.dev/blog/the-case-for-hoc-vs-composition-api/", "published_at": "2020-05-06T04:44:00+00:00" }, { "id": "01a08732-d179-735d-99a7-cf1a53d9f625", "title": "Caching GraphQL Responses", "url": "https://awad.dev/blog/caching-graphql-responses/", "published_at": "2020-02-24T08:00:00+00:00" }, { "id": "01a08732-d179-735d-99a7-cf1a5462f58f", "title": "Implementing Dark mode with TailwindCSS", "url": "https://awad.dev/blog/tailwind-dark-mode/", "published_at": "2020-02-08T15:30:00+00:00" }, { "id": "01a08732-d179-735d-99a7-cf1a547b058c", "title": "Announcing Villus - A tiny and fast GraphQL Client for Vue.js", "url": "https://awad.dev/blog/announcing-villus/", "published_at": "2020-01-11T20:00:00+00:00" }, { "id": "01a08732-d179-735d-99a7-cf1a55067a06", "title": "Off Main Thread Architecture with Vuex", "url": "https://awad.dev/blog/vuex-off-main-thread/", "published_at": "2019-12-21T14:00:00+00:00" }, { "id": "01a08732-d179-735d-99a7-cf1a55123630", "title": "Forcing Re-computation of Vue's computed properties", "url": "https://awad.dev/blog/forcing-recomputation-of-computed-properties/", "published_at": "2019-10-11T14:00:00+00:00" }, { "id": "01a08732-d179-735d-99a7-cf1a55d2cb45", "title": "Cost Effective Serverless Nuxt.js", "url": "https://awad.dev/blog/cost-effective-serverless-nuxt-js/", "published_at": "2019-08-26T00:00:00+00:00" }, { "id": "01a08732-d179-735d-99a7-cf1a56820e67", "title": "Getting More Out of Vue Async Components", "url": "https://awad.dev/blog/getting-more-out-of-vue-async-components/", "published_at": "2019-08-03T20:00:00+00:00" }, { "id": "01a08732-d179-735d-99a7-cf1a571a3507", "title": "Resource-Adaptive Vue Apps", "url": "https://awad.dev/blog/resource-adaptive-vue-apps/", "published_at": "2019-07-19T20:00:00+00:00" }, { "id": "01a08732-d179-735d-99a7-cf1a5806f5df", "title": "Stateful Functional Components", "url": "https://awad.dev/blog/kinda-stateful-functional-components/", "published_at": "2019-06-29T22:39:00+00:00" }, { "id": "01a08732-d179-735d-99a7-cf1a58a9ef00", "title": "What does the Vue function API feel like", "url": "https://awad.dev/blog/vue-rfc-function-api/", "published_at": "2019-06-17T02:48:00+00:00" }, { "id": "01a08732-d179-735d-99a7-cf1a58b436f4", "title": "HTML5 Aided Vue.js form validation", "url": "https://awad.dev/blog/html-aided-vuejs-form-validation/", "published_at": "2019-05-03T16:36:00+00:00" } ] posts Claim your blog
Back to awad.dev
Blog · corpus.blog/blogs/awad.dev/posts

awad.dev

awad.dev

2026

2025

2024

2023

2022

2021

2020

2019