<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Wael Kourich</title>
        <link>https://everkers.vercel.app</link>
        <description>I write about software engineering, productivity, and more.</description>
        <lastBuildDate>Wed, 08 Apr 2026 09:28:59 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Wael Kourich</title>
            <url>https://everkers.vercel.app/favicon.ico</url>
            <link>https://everkers.vercel.app</link>
        </image>
        <copyright>All rights reserved 2026</copyright>
        <item>
            <title><![CDATA[How I Hacked JavaScript to Support Modules in My Client-Based Code Editor.]]></title>
            <link>https://everkers.vercel.app/articles/modules-support</link>
            <guid>https://everkers.vercel.app/articles/modules-support</guid>
            <pubDate>Thu, 25 Apr 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2><strong>Some Background</strong></h2>
<p>About two months ago, I decided to start working on an entirely client-based code editor <a target="\_blank" href="https://echo.everkers.site/">(Echo)</a>, as a challenge for myself and to also revisit core JavaScript features. The initial idea was to create a minimal code editor that runs HTML, CSS, and JS projects with a feature for people who prefer explaining code via visual drawings. This feature is integrated with Excalidraw, a virtual whiteboard tool that allows users to create hand-drawn diagrams and wireframes. Through this integration, users could select a piece of code and connect it to an Excalidraw element. Once connected, hovering over the code would highlight the linked element on the sketching tab.</p>
<p>Thankfully, I managed to implement all the essential features but wanted to scale the challenge further by adding more interesting functionalities. The first thing that came to mind was the ability to use React or other front-end frameworks. But can that be done easily through CDNs?</p>
<img src="https://media2.giphy.com/media/v1.Y2lkPTc5MGI3NjExMnBjdGtodGk5eHU4N2VxM3h3eTBueXdsOGxzN2M5ZXcwcjZlamh2aCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3orifccLknoPlLrGSc/giphy.gif" width="400" height="307" alt="wires simpsons gif from giphy" class="rounded-lg">
<h2><strong>Framework Integration</strong></h2>
<p>I started by integrating our beloved framework React. Initially, I needed to find a fast and reliable CDN, so I opted for <a href="http://esm.sh/" target="_blank">esm.sh</a>, a modern CDN that supports <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules" target="_blank"> ES6 modules</a>.</p>
<pre class="language-jsx"><code class="language-jsx">
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>importmap<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token plain-text">
  {
    "imports": {
      "react": "https://esm.sh/react@18.2.0"
    }
  }
</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>

</code></pre>
<p>All I needed to do now is to choose how I want to compile the JSX code so the browser could understand it. The most popular compiler for React is <a href="https://babeljs.io/" target="_blank">Babel</a>, but for a client-based app, compiling speed is crucial. Therefore, I chose <a href="https://sucrase.io/" target="_blank">Sucrase</a> as it compiles JSX much faster, sacrificing old browser compatibility. Considering the nature of our app, this won't pose any risk.</p>
<p>With this in place, we now have the ability to run React code seamlessly in the browser. But what if we wanted to create independent components to later import them across React app files?</p>
<p>That wouldn't be possible because it's just a client-side app with files as records in a <a href="https://zustand-demo.pmnd.rs/" target="_blank">Zustand</a> store. However, I had to come up with a solution.</p>
<img src="https://media4.giphy.com/media/v1.Y2lkPTc5MGI3NjExa3o2bXBvd2V6cndtMmRtY2dhYTAyMG9vbmNlaWhkb2dqZnVjdzY5ZyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/WRQBXSCnEFJIuxktnw/giphy.gif" width="400" height="307" alt="confused gif from giphy" class="rounded-lg">
<h2><strong>Solution Overview</strong></h2>
<p>While we can't add imports and exports functionality the native JavaScript way, we can create our own implementation that mimics the same behavior by replacing the export and import declarations with our custom code.</p>
<img src="/_next/static/media/process-diagram.47b1dc2e.png" width="500" height="307" alt="ast process diagram">
<h2><strong>Converting the Code to AST (Abstract Syntax Tree)</strong></h2>
<blockquote>
<p>An <strong>abstract syntax tree</strong> (AST) is a data structure used in computer science to represent the structure of a program or code snippet. It provides a tree representation of the abstract syntactic structure of text written in a formal language. Each node of the tree denotes a construct occurring in the text. It is used by formatting tools such as <b>Prettier</b> and <b>ESLint</b> to format or spot code errors.</p>
</blockquote>
<p>We will start by converting our code to AST so it's easier to replace the built in export/import with our own functionality.</p>
<p>Let’s see how this basic code snippet looks like in AST format:</p>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword module">import</span> <span class="token punctuation">{</span> <span class="token constant">NAMES</span> <span class="token punctuation">}</span> <span class="token keyword module">from</span> <span class="token string">'constants'</span>
<span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span><span class="token constant">NAMES</span><span class="token punctuation">)</span>
</code></pre>
<pre class="language-json"><code class="language-json"><span class="token comment">// AST</span>
<span class="token punctuation">{</span>
  <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"Program"</span><span class="token punctuation">,</span>
  <span class="token property">"body"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
    <span class="token punctuation">{</span>
      <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"ImportDeclaration"</span><span class="token punctuation">,</span>
      <span class="token property">"specifiers"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
        <span class="token punctuation">{</span>
          <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"ImportSpecifier"</span><span class="token punctuation">,</span>
          <span class="token property">"imported"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
            <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"Identifier"</span><span class="token punctuation">,</span>
            <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"NAMES"</span>
          <span class="token punctuation">}</span><span class="token punctuation">,</span>
          <span class="token property">"local"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
            <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"Identifier"</span><span class="token punctuation">,</span>
            <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"NAMES"</span>
          <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
      <span class="token punctuation">]</span><span class="token punctuation">,</span>
      <span class="token property">"source"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
        <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"Literal"</span><span class="token punctuation">,</span>
        <span class="token property">"value"</span><span class="token operator">:</span> <span class="token string">"constants"</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token punctuation">{</span>
      <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"ExpressionStatement"</span><span class="token punctuation">,</span>
      <span class="token property">"expression"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
        <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"CallExpression"</span><span class="token punctuation">,</span>
        <span class="token property">"callee"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
          <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"MemberExpression"</span><span class="token punctuation">,</span>
          <span class="token property">"object"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
            <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"Identifier"</span><span class="token punctuation">,</span>
            <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"console"</span>
          <span class="token punctuation">}</span><span class="token punctuation">,</span>
          <span class="token property">"property"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
            <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"Identifier"</span><span class="token punctuation">,</span>
            <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"log"</span>
          <span class="token punctuation">}</span>
        <span class="token punctuation">}</span><span class="token punctuation">,</span>
        <span class="token property">"arguments"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
          <span class="token punctuation">{</span>
            <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"Identifier"</span><span class="token punctuation">,</span>
            <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"NAMES"</span>
          <span class="token punctuation">}</span>
        <span class="token punctuation">]</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">]</span>
<span class="token punctuation">}</span>
</code></pre>
<p>As you can tell, it provides a detailed breakdown for such a small piece of code, allowing us to make thorough changes.</p>
<p>We will focus on the following AST nodes:</p>
<ul>
<li><strong>ImportDeclaration</strong>: Refers to all types of import statements, differentiated through the <strong><code>specifiers</code></strong> array. We will be focusing on <strong><code>ImportSpecifier</code></strong> (Named imports) and <strong><code>ImportDefaultSpecifier</code></strong> (Default imports).</li>
<li><strong>ExportNamedDeclaration</strong>: Represents named export declarations with a <strong><code>specifiers</code></strong> array of exported identifiers.</li>
<li><strong>ExportDefaultDeclaration</strong>: Indicates default exports with a <strong><code>declaration</code></strong> object containing a single exported identifier.</li>
</ul>
<p>I suggest using <a href="https://astexplorer.net/" target="_blank">AST Explorer</a> to explore the structure of different code pieces.</p>
<h2><strong>Injecting the custom logic</strong></h2>
<p>As mentioned earlier, we need to create our own import and export functionality. To achieve that we can utilize the window object, this approach allows us to store a custom export method and a modules object containing the exports of each file.</p>
<p>The export method requires three parameters: the file name, identifier value, and the function we want to export. The implementation is straightforward; we execute an assignment to the window’s <strong><code>__modules__</code></strong> object, as shown below:</p>
<pre class="language-typescript"><code class="language-typescript">
<span class="token keyword">public</span> <span class="token function">_export</span><span class="token punctuation">(</span>file<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">,</span> exportName<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">,</span> <span class="token function-variable function">fn</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=&gt;</span> <span class="token keyword">void</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token dom variable">window</span><span class="token punctuation">.</span><span class="token property-access">__modules__</span><span class="token punctuation">[</span>file<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">{</span>
      <span class="token spread operator">...</span><span class="token punctuation">(</span><span class="token dom variable">window</span><span class="token punctuation">.</span><span class="token property-access">__modules__</span><span class="token punctuation">[</span>file<span class="token punctuation">]</span> <span class="token operator">||</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
      <span class="token punctuation">[</span>exportName<span class="token punctuation">]</span><span class="token operator">:</span> fn<span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Next, we put this into action by making the following changes to the AST Nodes:</p>
<ul>
<li><b>Imports</b>: We replace each import statement with a modules object,
assigning the file path to an indexed variable.</li>
</ul>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword">const</span> ___import_1__ <span class="token operator">=</span> __modules__<span class="token punctuation">[</span><span class="token string">'utils'</span><span class="token punctuation">]</span>
<span class="token comment">// For default imports:</span>
<span class="token keyword">const</span> ___import_1__ <span class="token operator">=</span> __modules__<span class="token punctuation">[</span><span class="token string">'utils'</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token keyword module">default</span>
</code></pre>
<ul>
<li><b>Exports</b>: Similar to imports, we replace the export statement with our
custom method, passing the file path, identifier name, and the exported value
as parameters.</li>
</ul>
<pre class="language-jsx"><code class="language-jsx"><span class="token function">__export__</span><span class="token punctuation">(</span><span class="token string">'utils'</span><span class="token punctuation">,</span> <span class="token string">'sum'</span><span class="token punctuation">,</span> sum<span class="token punctuation">)</span>
<span class="token comment">// For default exports:</span>
<span class="token function">__export__</span><span class="token punctuation">(</span><span class="token string">'utils'</span><span class="token punctuation">,</span> <span class="token string">'default'</span><span class="token punctuation">,</span> sum<span class="token punctuation">)</span>
</code></pre>
<p>After implementing these modifications, the final step is to store all imported identifiers to replace them using regular expressions if used in the code.</p>
<img src="/_next/static/media/identifiers-diagram.cb1ae7fd.png" width="210" height="307" class="rounded-md" alt="identifiers diagrams">
<p>Let’s now examine how the code looks before and after the transformation:</p>
<p><strong>Utils File</strong></p>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword module">export</span> <span class="token keyword">const</span> <span class="token constant">NUMS</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
<span class="token keyword module">export</span> <span class="token keyword">const</span> <span class="token function-variable function">sum</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">a<span class="token punctuation">,</span> b</span><span class="token punctuation">)</span> <span class="token arrow operator">=&gt;</span> a <span class="token operator">+</span> b

<span class="token comment">// Transformed</span>

__modules__<span class="token punctuation">[</span><span class="token string">'utils.js'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
<span class="token keyword">const</span> <span class="token constant">NUMS</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
<span class="token function">__export__</span><span class="token punctuation">(</span><span class="token string">'utils.js'</span><span class="token punctuation">,</span> <span class="token string">'NUMS'</span><span class="token punctuation">,</span> <span class="token constant">NUMS</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> <span class="token function-variable function">sum</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">a<span class="token punctuation">,</span> b</span><span class="token punctuation">)</span> <span class="token arrow operator">=&gt;</span> a <span class="token operator">+</span> b
<span class="token function">__export__</span><span class="token punctuation">(</span><span class="token string">'utils.js'</span><span class="token punctuation">,</span> <span class="token string">'sum'</span><span class="token punctuation">,</span> sum<span class="token punctuation">)</span>
</code></pre>
<p><strong>Index File</strong></p>
<pre class="language-tsx"><code class="language-tsx"><span class="token keyword module">import</span> <span class="token punctuation">{</span> <span class="token constant">NUMS</span><span class="token punctuation">,</span> sum <span class="token punctuation">}</span> <span class="token keyword module">from</span> <span class="token string">'./utils.js'</span>
<span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span><span class="token function">sum</span><span class="token punctuation">(</span><span class="token constant">NUM</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token constant">NUM</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span>

<span class="token comment">// Transformed</span>

<span class="token keyword">const</span> __import_1__ <span class="token operator">=</span> __modules__<span class="token punctuation">[</span><span class="token string">'utils.js'</span><span class="token punctuation">]</span>
<span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span>__import_1__<span class="token punctuation">[</span><span class="token string">'sum'</span><span class="token punctuation">]</span><span class="token punctuation">(</span>__import_1__<span class="token punctuation">.</span><span class="token constant">NUM</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> __import_1__<span class="token punctuation">.</span><span class="token constant">NUM</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre>
<p>By now it should all make sense, we have a custom import system, instead of accessing the module we instead reach the data from the modules object that we stored in the window.</p>
<h2>The final test</h2>
<p>To round things off, let's walk through a React example importing <code>App</code> component that cotains a basic UI with some lodash functionality.</p>
<div style="height:400px"><iframe src="https://play.fastmotion.io/f9678d1e-d1ae-4876-9945-99282370fa44?autoplay=true&amp;loop=false&amp;muted=false&amp;preload=true" loading="lazy" class="h-full w-full" allow="accelerometer;gyroscope;autoplay;encrypted-media;picture-in-picture;" allowfullscreen="true"></iframe></div>
<h2>Summary</h2>
<p>The journey of implementing this tricky solution reflects a fundamental principle: every challenge has a solution with sufficient effort. We discovered the power of leveraging built-in JavaScript functionality, notably the window object, to achieve a custom modules system.</p>
<p>It's important to note that this article provides a high-level overview of the underlying processes. I hope it gives a glimpse into how these functionalities work in practice.</p>
<p>Stay tuned for more articles about <a target="\_blank" href="https://echox.vercel.app/">Echo</a>. Perhaps in the future, I’ll consider open-sourcing it, allowing the community to benefit from and contribute to its development.</p>]]></content:encoded>
            <author>everkers.dev@gmail.com (Wael Kourich)</author>
        </item>
        <item>
            <title><![CDATA[Taming Async Operations in React with use-async-stateful]]></title>
            <link>https://everkers.vercel.app/articles/use-async-stateful</link>
            <guid>https://everkers.vercel.app/articles/use-async-stateful</guid>
            <pubDate>Sun, 01 Oct 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>If you've worked with React for any decent amount of time, you've probably had your fair share of wrestling with asynchronous operations and the accompanying state management. Loading states, error messages, and then finally rendering data—it can all get a tad repetitive. That's why I decided to create and share use-async-stateful, a React Lightweight Hook designed to alleviate some of that pain.</p>
<h2>What Does use-async-stateful Do?</h2>
<p>At its core, this hook manages the states commonly associated with async operations. Think loading, error, and success without the fuss of setting and resetting states manually.</p>
<pre class="language-jsx"><code class="language-jsx"><span class="token keyword module">import</span> <span class="token imports"><span class="token punctuation">{</span> useAsyncHook <span class="token punctuation">}</span></span> <span class="token keyword module">from</span> <span class="token string">'use-async-stateful'</span><span class="token punctuation">;</span>

<span class="token keyword">const</span> <span class="token punctuation">{</span> status<span class="token punctuation">,</span> error<span class="token punctuation">,</span> execute <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">useAsyncStateful</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  <span class="token literal-property property">resetStatusOnSuccess</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
  <span class="token literal-property property">resetStatusOnError</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">const</span> <span class="token function-variable function">fetchData</span> <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token parameter"><span class="token literal-property property">id</span><span class="token operator">:</span> number</span><span class="token punctuation">)</span> <span class="token arrow operator">=&gt;</span> <span class="token punctuation">{</span>
  <span class="token comment">// Your async logic here</span>
  <span class="token keyword control-flow">return</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">Data for ID: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>id<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span>
<span class="token punctuation">}</span>

<span class="token comment">// Now, just use `execute` with your async functions!</span>

<span class="token keyword">const</span> <span class="token function-variable function">handleFetch</span> <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token arrow operator">=&gt;</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> data <span class="token operator">=</span> <span class="token keyword control-flow">await</span> <span class="token function">execute</span><span class="token punctuation">(</span>fetchData<span class="token punctuation">,</span> <span class="token number">123</span><span class="token punctuation">)</span>
    <span class="token console class-name">console</span><span class="token punctuation">.</span><span class="token method function property-access">log</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
</code></pre>
<h2>Features at a Glance</h2>
<ul>
<li><strong>Simplified Async State Management</strong>: Forget separate loading, error, and data states.</li>
<li><strong>Configurable Reset Options</strong>: Decide if and when you want to reset your status.</li>
<li><strong>TypeScript Support</strong>: For the folks who love strong typing, use-async-stateful has got your back.</li>
</ul>
<h2>Getting Started</h2>
<p>To integrate use-async-stateful into your project, you can use either npm or yarn:</p>
<pre class="language-bash"><code class="language-bash"><span class="token function">npm</span> <span class="token function">install</span> use-async-stateful
<span class="token comment"># or</span>
<span class="token function">yarn</span> <span class="token function">add</span> use-async-stateful
</code></pre>
<p>Then, you can follow the example above to integrate it into your components.</p>
<h2>Feedback &amp; Contributions</h2>
<p>Open-source thrives on community. Whether you have feature suggestions, issues, or want to contribute directly, you're welcome to check out the GitHub repo.</p>
<p>If you find <a href="https://github.com/Everkers/use-async-stateful" target="\_blank">use-async-stateful</a> helpful, consider giving it a star ⭐ or sharing it with fellow devs.</p>
<p>There you have it! I hope use-async-stateful can make your React adventures a tad smoother. Would love to hear your experiences and feedback in the comments below. Happy coding! 🚀</p>
<a href="https://github.com/Everkers/use-async-stateful" target="\_blank"><p>Link to the repository</p></a>]]></content:encoded>
            <author>everkers.dev@gmail.com (Wael Kourich)</author>
        </item>
    </channel>
</rss>