<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Serhii Muzalov</title>
    <description>The latest articles on DEV Community by Serhii Muzalov (@serhii_muzalov_58eb4988af).</description>
    <link>https://dev.to/serhii_muzalov_58eb4988af</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3531862%2F435e27a0-96f5-48fd-a599-3d5c083acfbb.jpg</url>
      <title>DEV Community: Serhii Muzalov</title>
      <link>https://dev.to/serhii_muzalov_58eb4988af</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/serhii_muzalov_58eb4988af"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Serhii Muzalov</dc:creator>
      <pubDate>Fri, 17 Apr 2026 06:29:56 +0000</pubDate>
      <link>https://dev.to/serhii_muzalov_58eb4988af/-1ncp</link>
      <guid>https://dev.to/serhii_muzalov_58eb4988af/-1ncp</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/serhii_muzalov_58eb4988af/how-many-times-did-you-write-the-same-watch-execute-loading-in-different-components-three-331l" class="crayons-story__hidden-navigation-link"&gt;How many times did you write the same watch + execute + loading in different components? 😅 Three tiny things that ruin data‑fetching UX&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/serhii_muzalov_58eb4988af" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3531862%2F435e27a0-96f5-48fd-a599-3d5c083acfbb.jpg" alt="serhii_muzalov_58eb4988af profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/serhii_muzalov_58eb4988af" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Serhii Muzalov
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Serhii Muzalov
                
              
              &lt;div id="story-author-preview-content-3513848" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/serhii_muzalov_58eb4988af" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3531862%2F435e27a0-96f5-48fd-a599-3d5c083acfbb.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Serhii Muzalov&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/serhii_muzalov_58eb4988af/how-many-times-did-you-write-the-same-watch-execute-loading-in-different-components-three-331l" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 17&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/serhii_muzalov_58eb4988af/how-many-times-did-you-write-the-same-watch-execute-loading-in-different-components-three-331l" id="article-link-3513848"&gt;
          How many times did you write the same watch + execute + loading in different components? 😅 Three tiny things that ruin data‑fetching UX
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/vue"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;vue&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/claude"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;claude&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/serhii_muzalov_58eb4988af/how-many-times-did-you-write-the-same-watch-execute-loading-in-different-components-three-331l" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/serhii_muzalov_58eb4988af/how-many-times-did-you-write-the-same-watch-execute-loading-in-different-components-three-331l#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>How many times did you write the same watch + execute + loading in different components? 😅 Three tiny things that ruin data‑fetching UX</title>
      <dc:creator>Serhii Muzalov</dc:creator>
      <pubDate>Fri, 17 Apr 2026 06:29:32 +0000</pubDate>
      <link>https://dev.to/serhii_muzalov_58eb4988af/how-many-times-did-you-write-the-same-watch-execute-loading-in-different-components-three-331l</link>
      <guid>https://dev.to/serhii_muzalov_58eb4988af/how-many-times-did-you-write-the-same-watch-execute-loading-in-different-components-three-331l</guid>
      <description>&lt;p&gt;If you’ve ever written the same &lt;code&gt;watch + execute + loading&lt;/code&gt; dance in multiple Vue components, you’re not alone.&lt;br&gt;&lt;br&gt;
I’ve been doing that too — until I built &lt;code&gt;vue‑muza‑use&lt;/code&gt;, my API‑layer library for Vue 3.&lt;/p&gt;

&lt;p&gt;In versions 0.9.0 and 0.10.0, I killed several small, but very annoying data‑fetching patterns that kept repeating across codebases.&lt;br&gt;&lt;br&gt;
Here’s how I did it, and why you probably don’t want them in your components anymore.&lt;/p&gt;

&lt;p&gt;💡 vue‑muza‑use 0.9.0 — what changed&lt;/p&gt;

&lt;p&gt;Over the last month, &lt;code&gt;vue‑muza‑use&lt;/code&gt; has already reduced the amount of API‑related code by 2–3x in four production projects.&lt;/p&gt;

&lt;p&gt;Notable additions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;watch&lt;/code&gt; + reactive &lt;code&gt;data&lt;/code&gt; / &lt;code&gt;params&lt;/code&gt; — subscribe directly inside &lt;code&gt;useApi&lt;/code&gt;, instead of adding a separate &lt;code&gt;watch&lt;/code&gt; every time. You declare what to watch, and the library handles the rest.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ignoreUpdates&lt;/code&gt; — turns off automatic re‑firing when you update filters, inspired by &lt;code&gt;watchIgnorable&lt;/code&gt; from VueUse, but built into the composable. Makes request behavior explicit and predictable.&lt;/li&gt;
&lt;li&gt;lightweight cache — just &lt;code&gt;cache: 'categories'&lt;/code&gt; on GET and &lt;code&gt;invalidateCache: 'categories'&lt;/code&gt; on POST/PUT/DELETE. No subscriptions, no complex logic, just in‑memory caching and explicit invalidation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right now, there are about 170 tests, and I’m focusing on making the API match what you already know from Vue — &lt;code&gt;watch&lt;/code&gt;, &lt;code&gt;immediate&lt;/code&gt;, &lt;code&gt;refs&lt;/code&gt; — so you don’t have to learn anything entirely new.&lt;/p&gt;

&lt;p&gt;Why should you try vue‑muza‑use?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It builds on what you already know: &lt;code&gt;watch&lt;/code&gt;, &lt;code&gt;immediate&lt;/code&gt;, reactive refs. No paradigm shift, no extra concepts.
&lt;/li&gt;
&lt;li&gt;The library is small and takes about 5–10 minutes to configure.
&lt;/li&gt;
&lt;li&gt;Built‑in &lt;code&gt;refreshToken&lt;/code&gt; support with a ready‑to‑go queue logic — just plug it into a plugin with 5–10 lines of code.
&lt;/li&gt;
&lt;li&gt;And starting with 0.10.0, there’s a Claude Code skill that knows your &lt;code&gt;useApi&amp;lt;TRaw, TSelected&amp;gt;&lt;/code&gt; pattern and all options (SWR, &lt;code&gt;poll&lt;/code&gt;, &lt;code&gt;watch&lt;/code&gt;, &lt;code&gt;select&lt;/code&gt;, &lt;code&gt;cache&lt;/code&gt;, &lt;code&gt;ignoreUpdates&lt;/code&gt;), so you don’t need to “teach” AI every time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to talk, walk through a use‑case, or just have a quick dev‑call — I’m open to chat 🙂&lt;/p&gt;

&lt;p&gt;🔗 npm: &lt;a href="https://www.npmjs.com/package/@ametie/vue-muza-use" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/@ametie/vue-muza-use&lt;/a&gt;&lt;br&gt;&lt;br&gt;
🔗 GitHub: &lt;a href="https://github.com/MortyQ/vue-useApi" rel="noopener noreferrer"&gt;https://github.com/MortyQ/vue-useApi&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>claude</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🚀 Безкоштовне менторство з Frontend розробки</title>
      <dc:creator>Serhii Muzalov</dc:creator>
      <pubDate>Fri, 26 Sep 2025 13:27:38 +0000</pubDate>
      <link>https://dev.to/serhii_muzalov_58eb4988af/biezkoshtovnie-mientorstvo-z-frontend-rozrobki-lj0</link>
      <guid>https://dev.to/serhii_muzalov_58eb4988af/biezkoshtovnie-mientorstvo-z-frontend-rozrobki-lj0</guid>
      <description>&lt;p&gt;Привіт, друзі!&lt;br&gt;
Запрошую 4–6 учасників у пілотний набір на безкоштовне навчання Vue + TypeScript із кар’єрною підтримкою. Це чудова можливість для тих, хто хоче швидше увійти в IT або прокачати свої навички у фронтенді.&lt;/p&gt;

&lt;p&gt;👨‍💻 Хто я&lt;/p&gt;

&lt;p&gt;• Frontend Engineer з 4+ роками досвіду роботи з Vue, TypeScript, Tailwind, GraphQL, REST.&lt;br&gt;
За цей час я:&lt;br&gt;
• з нуля побудував два масштабні Retail/E-commerce SaaS-проєкти;&lt;br&gt;
• створив і постійно розвиваю власну UI-бібліотеку та кастомну таблицю з широким функціоналом (робота над нею триває вже понад 2 роки);&lt;br&gt;
• допоміг двом trainee-розробникам стартувати й успішно вийти на ринок.&lt;/p&gt;

&lt;p&gt;Моя мета — вдосконалити навички менторства, поділитися практичними знаннями з комерційних проєктів і допомогти вам швидше зростати у професії.&lt;/p&gt;

&lt;p&gt;💡 Що вас чекає&lt;/p&gt;

&lt;p&gt;На першому етапі ми разом створимо просунутий To-Do застосунок на Vue 3 + Pinia + TypeScript + Tailwind із CRUD-функціоналом і додатковими фічами, які зустрічаються в реальних проєктах.&lt;br&gt;
Буде й опція деплою на Netlify/Vercel та репозиторій, який можна додати в портфоліо.&lt;/p&gt;

&lt;p&gt;📌 Тривалість першого блоку — 2 місяці.&lt;br&gt;
Після цього вирішимо разом, чи рухатися далі з розширеним набором завдань.&lt;/p&gt;

&lt;p&gt;🎯 Кар’єрна підтримка&lt;/p&gt;

&lt;p&gt;Менторство відбувається у співпраці з Career Language Center, тому, окрім технічних навичок, ви отримаєте ще й кар’єрний супровід від експертки Daria Rybalka:&lt;/p&gt;

&lt;p&gt;• Career Goal-Setting Session (30 хв. індивідуально у Zoom): постановка особистих цілей і плану дій;&lt;br&gt;
• Груповий воркшоп «Підготовка до пошуку роботи» + гайд і аудит CV та LinkedIn;&lt;br&gt;
• Груповий воркшоп «LinkedIn Pro. Видимість = можливості»: SEO-оптимізація профілю та стратегії нетворкінгу;&lt;br&gt;
• Progress-call (30 хв. індивідуально): перевірка прогресу та корекція стратегії.&lt;/p&gt;

&lt;p&gt;🙌 Для кого&lt;/p&gt;

&lt;p&gt;• Початківці, які вже впевнено володіють HTML/CSS і мають базу в JavaScript.&lt;br&gt;
• Ветерани та військові, які планують перехід у IT.&lt;br&gt;
• Усі, хто має щире бажання вчитись і готовий приділяти час практиці.&lt;/p&gt;

&lt;p&gt;Досвід і вік значення не мають — головне ваша мотивація 🚀&lt;/p&gt;

&lt;p&gt;🗓 Формат&lt;/p&gt;

&lt;p&gt;Онлайн-заняття 2 рази на тиждень.&lt;br&gt;
Максимум практики та самостійної роботи.&lt;br&gt;
Code-review і живий зворотний зв’язок від ментора.&lt;/p&gt;

&lt;p&gt;👉 Як долучитися&lt;/p&gt;

&lt;p&gt;Заповніть Google-форму &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfF58bQ9kn7mNJHSLGVHETTXJ6PLrKjUVf65lpY4B8zU2QEEw/viewform" rel="noopener noreferrer"&gt;https://docs.google.com/forms/d/e/1FAIpQLSfF58bQ9kn7mNJHSLGVHETTXJ6PLrKjUVf65lpY4B8zU2QEEw/viewform&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx2rdixmnmacar1nx9wxs.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx2rdixmnmacar1nx9wxs.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Після відбору я особисто зв’яжусь із кожним, хто пройде.&lt;br&gt;
Активуйте, щоб переглянути збільшене зображення.&lt;br&gt;
Немає альтернативного текстового опису для цього зображення&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>vue</category>
      <category>career</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
