<?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: Seif Ahmed</title>
    <description>The latest articles on DEV Community by Seif Ahmed (@codemaster_121482).</description>
    <link>https://dev.to/codemaster_121482</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854057%2F37a688cb-7e68-4fb1-8adf-19f2abd91849.png</url>
      <title>DEV Community: Seif Ahmed</title>
      <link>https://dev.to/codemaster_121482</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codemaster_121482"/>
    <language>en</language>
    <item>
      <title>How to Hunt a Bug Again (But at 10 AM ☀️)</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Sun, 19 Jul 2026 08:58:56 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/how-to-hunt-a-bug-again-but-at-10-am--1k6</link>
      <guid>https://dev.to/codemaster_121482/how-to-hunt-a-bug-again-but-at-10-am--1k6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Background track playing: "Execution Clap" by Kasane Teto&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Story:
&lt;/h2&gt;

&lt;p&gt;Picture this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is 10:00 AM.&lt;/li&gt;
&lt;li&gt;I just finished building a full comment editing system for Vlox.&lt;/li&gt;
&lt;li&gt;Right-click on any comment → update it instantly. Simple, right?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;But then... the nightmare returned, but this time, in the morning.&lt;/strong&gt; 🔥&lt;/p&gt;




&lt;h2&gt;
  
  
  The Nightmare Scenario 📉
&lt;/h2&gt;

&lt;p&gt;I logged out to test something. When I logged back in, the "Edit" option for my own comments was gone—until I refreshed the page.&lt;/p&gt;

&lt;p&gt;Even worse: if I logged out, the "Edit" option still appeared on comments that were not mine. It did not actually &lt;em&gt;do&lt;/em&gt; anything (server-side validation blocked it), but it looked broken and confusing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad UX. Broken state. My code was haunted.&lt;/strong&gt; 👻&lt;/p&gt;




&lt;h2&gt;
  
  
  The Root Cause 🔍
&lt;/h2&gt;

&lt;p&gt;The issue was simple—but hidden.&lt;/p&gt;

&lt;p&gt;I was attaching the &lt;code&gt;contextmenu&lt;/code&gt; event conditionally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;by&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentUserQuickInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Attach edit event&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;This worked at render time. But when you log out or switch users, &lt;code&gt;window.currentUserQuickInfo&lt;/code&gt; becomes stale. The event was either missing or sticking around when it should not. The state changed—but the UI did not know about it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Failed Mission Log 🛰️
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Attempt 1: Refresh the page after login 🔄
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Result:&lt;/strong&gt; It worked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Problem:&lt;/strong&gt; Users should not have to refresh to see basic state changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verdict:&lt;/strong&gt; Not acceptable for a real app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Attempt 2: Remove the feature entirely ❌
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Result:&lt;/strong&gt; It worked perfectly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Problem:&lt;/strong&gt; It removed a useful feature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verdict:&lt;/strong&gt; Throwing hours of work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Attempt 3: Create a custom edit icon for everyone 🖊️
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Result:&lt;/strong&gt; Clicking it would do nothing for comments that were not yours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verdict:&lt;/strong&gt; Server-side validation would block it, but the UX was still confusing.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The "Aha!" Moment 💡
&lt;/h2&gt;

&lt;p&gt;What if I attach the event to every comment—but check ownership inside the event? Instead of deciding at render time, I decide at click time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before: Conditional attachment
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;by&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentUserQuickInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;contextmenu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  After: Always attach, check inside
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;contextmenu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;by&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentUserQuickInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Show edit modal&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the event is always there—and it only acts if the current user is the owner.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Full Fix 🚀
&lt;/h2&gt;

&lt;p&gt;I also made sure the state refreshed on logout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;signOutBtn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ... logout logic&lt;/span&gt;
  &lt;span class="nf"&gt;getQuickInfo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// This was the missing piece&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the UI always reflects the current user state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No more stale events.&lt;/li&gt;
&lt;li&gt;No more confusing UI.&lt;/li&gt;
&lt;li&gt;No page refresh needed.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Want to see the full code? Check out &lt;strong&gt;&lt;a href="https://github.com/Hfs2024/Vlox" rel="noopener noreferrer"&gt;Vlox on GitHub&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>debugging</category>
      <category>devjournal</category>
      <category>frontend</category>
      <category>ux</category>
    </item>
    <item>
      <title>The Debugging Method That Never Fails</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Wed, 15 Jul 2026 05:25:40 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/the-debugging-method-that-never-fails-4mje</link>
      <guid>https://dev.to/codemaster_121482/the-debugging-method-that-never-fails-4mje</guid>
      <description>&lt;p&gt;We all break things break things a lot. But we should also learn how to fix them.&lt;/p&gt;

&lt;p&gt;Here is the exact method I use every time my code breaks—and it works 100% of the time.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 Step 1: Ask the Right Question
&lt;/h3&gt;

&lt;p&gt;Before you change anything, stop and ask yourself:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"What was the last fix or feature I tried to add?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the key. Most bugs come from the most recent change.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔍 Step 2: Remove the Last Thing You Added
&lt;/h3&gt;

&lt;p&gt;Take out the code you just wrote. Revert to the last working state.&lt;/p&gt;

&lt;p&gt;Then ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Does it work now?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If yes—you found the source.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧩 Step 3: Add It Back—But Slowly
&lt;/h3&gt;

&lt;p&gt;Re-add the feature, but &lt;strong&gt;not all at once&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Add it piece by piece, testing after each small change.&lt;/p&gt;

&lt;p&gt;When the break happens again, you will know &lt;strong&gt;exactly&lt;/strong&gt; which part caused it.&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠️ Step 4: Fix the Snippet
&lt;/h3&gt;

&lt;p&gt;Now that you have found the broken piece, focus only on that.&lt;/p&gt;

&lt;p&gt;Rewrite it. Simplify it. Test it.&lt;/p&gt;

&lt;p&gt;Fix it the way you know best—then move on.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ Step 5: Celebrate
&lt;/h3&gt;

&lt;p&gt;You just hunted down a bug and killed it. 🐛&lt;/p&gt;

&lt;p&gt;That is not small. That is &lt;strong&gt;engineering&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  💡 Why This Works
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It isolates the problem. 🔥&lt;/li&gt;
&lt;li&gt;It removes guesswork. 👨🏻‍💻 &lt;/li&gt;
&lt;li&gt;It teaches you what broke and why. 🛠️&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;That's my method. Use it. Trust it. And keep building your &lt;em&gt;own&lt;/em&gt; system.&lt;/strong&gt; 🚀&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>webdev</category>
      <category>debugging</category>
      <category>programming</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Mon, 13 Jul 2026 19:31:58 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/-47bj</link>
      <guid>https://dev.to/codemaster_121482/-47bj</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/codemaster_121482/im-available-for-freelance-work-3fjo" class="crayons-story__hidden-navigation-link"&gt;I'm Available for Freelance Work 🚀&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="/codemaster_121482" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854057%2F37a688cb-7e68-4fb1-8adf-19f2abd91849.png" alt="codemaster_121482 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/codemaster_121482" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Seif Ahmed
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Seif Ahmed
                
              
              &lt;div id="story-author-preview-content-4133963" 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="/codemaster_121482" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854057%2F37a688cb-7e68-4fb1-8adf-19f2abd91849.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Seif Ahmed&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/codemaster_121482/im-available-for-freelance-work-3fjo" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 13&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/codemaster_121482/im-available-for-freelance-work-3fjo" id="article-link-4133963"&gt;
          I'm Available for Freelance Work 🚀
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&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;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/node"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;node&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/freelance"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;freelance&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/codemaster_121482/im-available-for-freelance-work-3fjo" 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/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/codemaster_121482/im-available-for-freelance-work-3fjo#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&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>I'm Available for Freelance Work 🚀</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Mon, 13 Jul 2026 13:25:08 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/im-available-for-freelance-work-3fjo</link>
      <guid>https://dev.to/codemaster_121482/im-available-for-freelance-work-3fjo</guid>
      <description>&lt;p&gt;I'm &lt;strong&gt;Seif&lt;/strong&gt;, a full-stack developer who builds real working apps.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Vlox&lt;/strong&gt; – a complete social platform with authentication, posts, comments, reactions, search, and a custom frontend library called &lt;strong&gt;NanoScript&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I can help you with:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node.js · Express · MongoDB&lt;/li&gt;
&lt;li&gt;REST APIs &amp;amp; Authentication&lt;/li&gt;
&lt;li&gt;Bug fixing &amp;amp; debugging&lt;/li&gt;
&lt;li&gt;Full-stack web applications&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Portfolio
&lt;/h3&gt;

&lt;p&gt;👉 &lt;a href="https://seifportfolio.seifahmed.workers.dev" rel="noopener noreferrer"&gt;seifportfolio.seifahmed.workers.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I write clean, secure, and maintainable code. If you need something built, fixed, or improved – let's talk.&lt;/p&gt;

&lt;p&gt;📩 Reach out: &lt;a href="mailto:requestse@gmail.com"&gt;requestse@gmail.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's build something great together!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>node</category>
      <category>freelance</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Sat, 11 Jul 2026 14:57:52 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/-1on4</link>
      <guid>https://dev.to/codemaster_121482/-1on4</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/codemaster_121482/nanoscript-can-finally-create-real-projects-1oi7" class="crayons-story__hidden-navigation-link"&gt;NanoScript can finally create real projects!&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="/codemaster_121482" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854057%2F37a688cb-7e68-4fb1-8adf-19f2abd91849.png" alt="codemaster_121482 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/codemaster_121482" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Seif Ahmed
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Seif Ahmed
                
              
              &lt;div id="story-author-preview-content-4061585" 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="/codemaster_121482" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854057%2F37a688cb-7e68-4fb1-8adf-19f2abd91849.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Seif Ahmed&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/codemaster_121482/nanoscript-can-finally-create-real-projects-1oi7" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 3&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/codemaster_121482/nanoscript-can-finally-create-real-projects-1oi7" id="article-link-4061585"&gt;
          NanoScript can finally create real projects!
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/codemaster_121482/nanoscript-can-finally-create-real-projects-1oi7" 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/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/codemaster_121482/nanoscript-can-finally-create-real-projects-1oi7#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;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 crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&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 to Hunt a Bug at 10 PM 🌙</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Sat, 11 Jul 2026 09:24:01 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/how-to-hunt-a-bug-at-10-pm-5gkf</link>
      <guid>https://dev.to/codemaster_121482/how-to-hunt-a-bug-at-10-pm-5gkf</guid>
      <description>&lt;h2&gt;
  
  
  The Story:
&lt;/h2&gt;

&lt;p&gt;Picture this: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is 10 PM. &lt;/li&gt;
&lt;li&gt;I was eating my dinner while adding one final touch to my social media app, Vlox. &lt;/li&gt;
&lt;li&gt;It should just say "Processing..." while generating a card. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simple, right? &lt;br&gt;
See the nightmare. 🔥&lt;/p&gt;

&lt;h3&gt;
  
  
  The Nightmare Scenario 📉
&lt;/h3&gt;

&lt;p&gt;Suddenly, my "Download Card" button broke.&lt;br&gt;
&lt;code&gt;htmlToImage&lt;/code&gt; started spitting out completely empty 0b images. &lt;br&gt;
The hunt was on. &lt;/p&gt;

&lt;h3&gt;
  
  
  Failed Mission Log 🛰️
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Attempt 1: Swap to html2canvas&lt;/strong&gt; 🔄

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Result:&lt;/em&gt; Error stating the element was not found in the cloned iframe.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Verdict:&lt;/em&gt; The parent container was completely lost.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attempt 2: Use CoolAlertJS Toast&lt;/strong&gt; 🍞

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Result:&lt;/em&gt; It looked ugly and means loading two different alert libraries for the same job? Not my game.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Verdict:&lt;/em&gt; Total waste of bundle size.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attempt 3: Append card preview to body + &lt;code&gt;display: none&lt;/code&gt;&lt;/strong&gt; 🙈

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Result:&lt;/em&gt; The canvas process failed entirely.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Verdict:&lt;/em&gt; Canvas snapshot engines completely ignore hidden elements.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The "Aha!" Moment 💡
&lt;/h3&gt;

&lt;p&gt;Why did the element vanish? &lt;br&gt;
Because the card generator lives entirely inside a &lt;code&gt;Swal&lt;/code&gt; popup. &lt;br&gt;
When you click the download/confirm button, &lt;code&gt;Swal&lt;/code&gt; instantly destroys that entire popup DOM tree. &lt;br&gt;
You cannot snapshot an element that no longer exists. 👻&lt;/p&gt;

&lt;h3&gt;
  
  
  The Ultimate Fix 🚀
&lt;/h3&gt;

&lt;p&gt;Inside the new "Processing" popup, I appended the &lt;code&gt;#card-generator-image-preview&lt;/code&gt; directly into the &lt;em&gt;new&lt;/em&gt; alert container. &lt;br&gt;
The element stays alive in the active DOM. &lt;br&gt;
The snapshot succeeds perfectly. &lt;br&gt;
Clean code. Happy developer. Delicious dinner. &lt;/p&gt;




&lt;p&gt;Want to see the &lt;strong&gt;exact JavaScript code block&lt;/strong&gt; that fixed it? Drop a comment below or check &lt;strong&gt;&lt;a href="https://github.com/Hfs2024/Vlox" rel="noopener noreferrer"&gt;Vlox on Github&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>debugging</category>
    </item>
    <item>
      <title>How I built a social media app using my own library</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Fri, 10 Jul 2026 16:57:12 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/the-story-behind-hot-i-built-a-full-social-media-app-using-my-own-framework-1d6k</link>
      <guid>https://dev.to/codemaster_121482/the-story-behind-hot-i-built-a-full-social-media-app-using-my-own-framework-1d6k</guid>
      <description>&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftid03p48veu395fkjf4u.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftid03p48veu395fkjf4u.png" alt="Image of Vlox" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Link to Code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vlox:&lt;/strong&gt; &lt;a href="https://github.com/Hfs2024/Vlox" rel="noopener noreferrer"&gt;Source Code on Github&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NanoScript:&lt;/strong&gt; &lt;a href="https://github.com/Hfs2024/NanoScript" rel="noopener noreferrer"&gt;Source Code on Github&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Built It: Breaking the Vanilla JS Wall
&lt;/h2&gt;

&lt;p&gt;I am an experienced web developer, and my journey into full-stack development started when I wanted to build a private social media platform called &lt;em&gt;PixUp&lt;/em&gt;. I built it using pure Vanilla JavaScript. Soon, the codebase became heavily bloated, messy, and completely unmaintainable. &lt;/p&gt;

&lt;p&gt;In early 2026, I tried again with a project called &lt;em&gt;BlockSocial&lt;/em&gt;. I added complex features like JSONL exports, backup uploads, and post forks. It grew into a giant, complex system that normal users wouldn't understand, and as a solo developer, I couldn't maintain it alone. &lt;/p&gt;

&lt;p&gt;I had to stop and ask myself: &lt;em&gt;Why do my social media apps keep failing?&lt;/em&gt; &lt;br&gt;
The answer was always the same: &lt;strong&gt;Verbose Vanilla JS.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Dilemma &amp;amp; The Solution
&lt;/h3&gt;

&lt;p&gt;When planning my next platform, &lt;strong&gt;Vlox&lt;/strong&gt;, I evaluated my frontend options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;jQuery?&lt;/strong&gt; Too legacy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern Frameworks (React/Vue)?&lt;/strong&gt; Too heavy for edge environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vanilla JS?&lt;/strong&gt; Too verbose.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I decided to take the best parts of each and engineer my own solution. I built &lt;strong&gt;NanoScript&lt;/strong&gt;—a modern, ultra-lightweight JavaScript library designed for fluent DOM manipulation via a fast, method-chaining API. To make it even more powerful, I engineered custom plugins for it, including a live counter and &lt;strong&gt;Ghost State&lt;/strong&gt; (which automatically saves what you type so you never lose a draft).&lt;/p&gt;

&lt;h3&gt;
  
  
  Bringing Vlox to Life
&lt;/h3&gt;

&lt;p&gt;With NanoScript handling the frontend, I built &lt;strong&gt;Vlox&lt;/strong&gt; as a clean, high-performance Minimum Viable Product (MVP). It features a robust Node.js/Express backend, MongoDB database storage, secure bcrypt hashing, XSS sanitization, and an optimized Sharp image processing pipeline. &lt;/p&gt;

&lt;p&gt;Thanks to NanoScript, the frontend architecture is finally in a state that I can easily scale without hitting a wall of messy code.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Focused on This Weekend
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Repository Overhaul:&lt;/strong&gt; Standardized the architecture for both Vlox and NanoScript to make them clean for the public.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples:&lt;/strong&gt; Wrote several example codes using NanoScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Audit:&lt;/strong&gt; Verified that the NanoScript plugin architecture and Vlox's Express rate-limiting work flawlessly under pressure.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you liked the project, please drop a star on GitHub!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for reading!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>javascript</category>
      <category>node</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Fri, 10 Jul 2026 11:31:09 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/-4f49</link>
      <guid>https://dev.to/codemaster_121482/-4f49</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/codemaster_121482/are-you-tired-of-verbose-javascript-code-check-nanoscript-368c" class="crayons-story__hidden-navigation-link"&gt;Are you tired of verbose JavaScript code? Check NanoScript&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="/codemaster_121482" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854057%2F37a688cb-7e68-4fb1-8adf-19f2abd91849.png" alt="codemaster_121482 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/codemaster_121482" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Seif Ahmed
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Seif Ahmed
                
              
              &lt;div id="story-author-preview-content-4033619" 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="/codemaster_121482" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854057%2F37a688cb-7e68-4fb1-8adf-19f2abd91849.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Seif Ahmed&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/codemaster_121482/are-you-tired-of-verbose-javascript-code-check-nanoscript-368c" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 30&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/codemaster_121482/are-you-tired-of-verbose-javascript-code-check-nanoscript-368c" id="article-link-4033619"&gt;
          Are you tired of verbose JavaScript code? Check NanoScript
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&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/codemaster_121482/are-you-tired-of-verbose-javascript-code-check-nanoscript-368c" 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/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/codemaster_121482/are-you-tired-of-verbose-javascript-code-check-nanoscript-368c#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&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>[Boost]</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Fri, 10 Jul 2026 05:37:13 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/-2onl</link>
      <guid>https://dev.to/codemaster_121482/-2onl</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/codemaster_121482/building-a-secure-authentication-system-dch" class="crayons-story__hidden-navigation-link"&gt;Building a Secure Authentication System&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="/codemaster_121482" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854057%2F37a688cb-7e68-4fb1-8adf-19f2abd91849.png" alt="codemaster_121482 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/codemaster_121482" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Seif Ahmed
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Seif Ahmed
                
              
              &lt;div id="story-author-preview-content-4106913" 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="/codemaster_121482" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854057%2F37a688cb-7e68-4fb1-8adf-19f2abd91849.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Seif Ahmed&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/codemaster_121482/building-a-secure-authentication-system-dch" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 9&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/codemaster_121482/building-a-secure-authentication-system-dch" id="article-link-4106913"&gt;
          Building a Secure Authentication System
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&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;a class="crayons-tag  crayons-tag--monochrome " href="/t/authjs"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;authjs&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&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/codemaster_121482/building-a-secure-authentication-system-dch" 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/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/codemaster_121482/building-a-secure-authentication-system-dch#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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 crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&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>Building a Secure Authentication System</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Thu, 09 Jul 2026 14:34:43 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/building-a-secure-authentication-system-dch</link>
      <guid>https://dev.to/codemaster_121482/building-a-secure-authentication-system-dch</guid>
      <description>&lt;p&gt;This guide details the logic for implementing a secure, session-based user login system using Node.js, Mongoose and Bcrypt. &lt;/p&gt;




&lt;h2&gt;
  
  
  📝 Step-by-Step Implementation:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Database Lookup
&lt;/h3&gt;

&lt;p&gt;When a user submits their credentials, the system queries MongoDB to locate the user profile.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Method:&lt;/strong&gt; &lt;code&gt;findOne({ username })&lt;/code&gt; via Mongoose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Rule:&lt;/strong&gt; If the username does not exist, halt execution immediately. Return a &lt;strong&gt;401 Unauthorized&lt;/strong&gt; status.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Password Verification
&lt;/h3&gt;

&lt;p&gt;If the user account exists, the system compares the plain-text input password against the hashed password stored in the database.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Method:&lt;/strong&gt; &lt;code&gt;await bcrypt.compare(password, user.password)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Rule:&lt;/strong&gt; If the comparison returns &lt;code&gt;false&lt;/code&gt;, halt execution. Return a &lt;strong&gt;401 Unauthorized&lt;/strong&gt; status.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Session Management
&lt;/h3&gt;

&lt;p&gt;Once both checks pass, the system initializes a secure session to keep the user authenticated across subsequent requests.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;State Flags:&lt;/strong&gt; 

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;req.session.isLoggedIn = true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;req.session.userId = user._id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response:&lt;/strong&gt; Return a &lt;strong&gt;200 OK&lt;/strong&gt; status with a success message.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔒 Security Best Practices Implemented:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generic Error Messages:&lt;/strong&gt; Both missing usernames and incorrect passwords return the exact same message: &lt;code&gt;"Invalid username or password"&lt;/code&gt;. This prevents attackers from brute-forcing and enumerating valid usernames.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cryptographic Hashing:&lt;/strong&gt; Passwords are never stored or compared in plain text. Bcrypt handles salt generation automatically to protect against rainbow table attacks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stateful Sessions:&lt;/strong&gt; Using server-side sessions keeps user identity secure and reduces the risk of token theft common in purely client-side storage.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💻 Quick Code Example:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/login&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// 1. Check if the user exists&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findOne&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;username&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;401&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Invalid username or password&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// 2. Verify the password&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isMatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isMatch&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;401&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Invalid username or password&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// 3. Establish session data&lt;/span&gt;
    &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isLoggedIn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Congrats! You are logged in!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Internal server error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you found this guide helpful, please consider giving it a like!&lt;br&gt;
&lt;strong&gt;Thanks for reading!&lt;/strong&gt; &lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>webdev</category>
      <category>authjs</category>
      <category>programming</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Thu, 09 Jul 2026 10:54:53 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/-4h0</link>
      <guid>https://dev.to/codemaster_121482/-4h0</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/codemaster_121482/are-you-tired-of-verbose-javascript-code-check-nanoscript-368c" class="crayons-story__hidden-navigation-link"&gt;Are you tired of verbose JavaScript code? Check NanoScript&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="/codemaster_121482" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854057%2F37a688cb-7e68-4fb1-8adf-19f2abd91849.png" alt="codemaster_121482 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/codemaster_121482" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Seif Ahmed
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Seif Ahmed
                
              
              &lt;div id="story-author-preview-content-4033619" 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="/codemaster_121482" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854057%2F37a688cb-7e68-4fb1-8adf-19f2abd91849.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Seif Ahmed&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/codemaster_121482/are-you-tired-of-verbose-javascript-code-check-nanoscript-368c" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 30&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/codemaster_121482/are-you-tired-of-verbose-javascript-code-check-nanoscript-368c" id="article-link-4033619"&gt;
          Are you tired of verbose JavaScript code? Check NanoScript
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&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/codemaster_121482/are-you-tired-of-verbose-javascript-code-check-nanoscript-368c" 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/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/codemaster_121482/are-you-tired-of-verbose-javascript-code-check-nanoscript-368c#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&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>Can my DOM library build a real working social media app?</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Thu, 09 Jul 2026 06:56:26 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/can-my-dom-library-build-a-real-working-social-media-app-4ic7</link>
      <guid>https://dev.to/codemaster_121482/can-my-dom-library-build-a-real-working-social-media-app-4ic7</guid>
      <description>&lt;p&gt;We’ve all been there—stuck in the endless loop of massive frontend frameworks, massive bundle sizes, and complex state management just to build a standard web app. &lt;/p&gt;

&lt;p&gt;So, I decided to take a step back and build my own frontend DOM library named &lt;strong&gt;NanoScript&lt;/strong&gt;. It’s lightweight, fast, and stays close to native vanilla JS speed. But I wanted to see if it could actually handle a heavy, real-world workload. &lt;/p&gt;

&lt;p&gt;Could a custom DOM library build a fully functioning social media app?&lt;/p&gt;

&lt;p&gt;To find out, I built &lt;strong&gt;Vlox&lt;/strong&gt;. And it actually works.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Vlox?
&lt;/h2&gt;

&lt;p&gt;Vlox is a fully working social media platform powered entirely by NanoScript on the frontend. I didn't want to just build a basic "to-do list" app; I wanted to push the library to its absolute limits with features that production apps actually need. &lt;/p&gt;

&lt;p&gt;Here is what's currently running under the hood in &lt;strong&gt;Vlox&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full Auth Flow:&lt;/strong&gt; Working login, signup, and logout sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Feed:&lt;/strong&gt; Creating, loading, and interacting with posts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Images Hall:&lt;/strong&gt; A responsive, media-heavy grid gallery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Counters:&lt;/strong&gt; Real-time updates for engagement and metrics without tanking performance.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why NanoScript?
&lt;/h2&gt;

&lt;p&gt;The goal behind NanoScript wasn't to reinvent the wheel, but to make DOM manipulation and frontend code clean without the bloated boilerplate of modern build tools. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero Bloat:&lt;/strong&gt; It keeps your initial page loads incredibly fast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast Rendering:&lt;/strong&gt; Highly optimized for updating fast-paced feeds (like the Vlox image gallery).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple Syntax:&lt;/strong&gt; Handles event listeners and reactive UI updates with minimal code.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Check out the code 🖥️
&lt;/h2&gt;

&lt;p&gt;Both the library, the concepts behind it and Vlox are completely open-source. If you want to see how the DOM manipulation works under the hood or check out the architecture, you can find the repository here:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/Hfs2024/NanoScript" rel="noopener noreferrer"&gt;NanoScript on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/Hfs2024/Vlox" rel="noopener noreferrer"&gt;Vlox on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Take a look, test it out, and let me know what you think! If you find it interesting, a star on the repo would be massive. &lt;/p&gt;

&lt;p&gt;Drop a comment below if you have any questions!&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>javascript</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
