<?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%2Ff7415c1f-526d-4c1c-bb07-8a2214110605.jpg</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>Why I built Vlox with Node.js, Cash, and MongoDB</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Thu, 22 Oct 2026 19:03:02 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/why-i-built-vlox-with-nodejs-cash-and-mongodb-2ohc</link>
      <guid>https://dev.to/codemaster_121482/why-i-built-vlox-with-nodejs-cash-and-mongodb-2ohc</guid>
      <description>&lt;p&gt;Hey guys! 👋🏻&lt;/p&gt;

&lt;p&gt;I've been sharing a lot lately about my social media app, Vlox, but I haven't explained why I chose to create Vlox in Node.js and why I used Cash instead of a heavy modern framework like React. Today I'm going to tell you why.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current tech stack
&lt;/h2&gt;

&lt;p&gt;The core of Vlox is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Backend:&lt;/strong&gt; Node.js and Express (for its asynchronous, non-blocking architecture)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Frontend:&lt;/strong&gt; Cash (a tiny, lightweight jQuery alternative)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Database:&lt;/strong&gt; MongoDB with Mongoose (because I wanted to use schemas as blueprints for the data structure)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Cash over React or Vue?
&lt;/h2&gt;

&lt;p&gt;Most devs immediately reach for React, Vue or other modern frameworks when starting a social app. But I chose Cash for two major reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To prove that you don't need traditional tools to build something clean, functional, and secure.&lt;/li&gt;
&lt;li&gt;And to keep my app lightweight. Frameworks like React bring a lot of weight and bloat with them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since I'm not planning to make Vlox a massive platform like Facebook, I don't need to worry about complex scaling issues. Keeping the scope focused allows me to prioritize simplicity over enterprise-level architecture. &lt;em&gt;Perfecto&lt;/em&gt; 👌🏻&lt;/p&gt;

&lt;h2&gt;
  
  
  Why MongoDB instead of SQL?
&lt;/h2&gt;

&lt;p&gt;Choosing MongoDB over a relational SQL database came down to how the app actually works. &lt;/p&gt;

&lt;p&gt;First, Vlox doesn't need database JOINs. For example, I don't need complex queries to find "friends of friends" because Vlox doesn't have a friends feature; it's a content and community network like DEV. Even when fetching post authors, I rely on Mongoose references and field population. This works perfectly for mid-sized apps, though SQL is a better fit for large relational data. In the end, large social media apps usually rely on a hybrid approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL for user profiles, authentication, core relational data, and transactional records.&lt;/li&gt;
&lt;li&gt;And NoSQL (like MongoDB, Redis, etc...) for caching, real-time notifications, session tokens, and high-speed feed lookups.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Second, the entire backend runs on Node.js. Because MongoDB uses a JSON-like format, it works smoothly out of the box with JavaScript-heavy stacks.&lt;/p&gt;




&lt;p&gt;I would really love to hear what you think about this approach. Drop a comment below if you have any questions about using Cash or building without the usual heavy frameworks!&lt;/p&gt;

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

</description>
      <category>javascript</category>
      <category>mongodb</category>
      <category>node</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How Binary Search Actually Works: A Deep Dive 🔍</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Sat, 17 Oct 2026 17:03:47 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/how-binary-search-actually-works-a-deep-dive-3coc</link>
      <guid>https://dev.to/codemaster_121482/how-binary-search-actually-works-a-deep-dive-3coc</guid>
      <description>&lt;p&gt;Hey guys! 👋🏻&lt;/p&gt;

&lt;p&gt;In my &lt;a href="https://dev.to/codemaster_121482/how-to-safely-implement-bubble-sort-a-full-guide-47kj"&gt;last article&lt;/a&gt;, I talked about one of the most basic sorting algorithms: Bubble Sort. Bubble Sort is a fundamental algorithm used to sort data. It works by repeatedly stepping through a list, comparing adjacent elements and swapping them if needed. But what if we want to find a target within our sorted collection? There are several algorithms we can use, and today, we're going to look at one of the most efficient: Binary Search.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Binary Search?
&lt;/h2&gt;

&lt;p&gt;Binary Search is a powerful algorithm designed to find the position of a target value within a sorted collection. It relies on the Divide and Conquer approach, cutting the remaining search space in half with each step. Trust me, that's much better than the slow linear search 😅&lt;/p&gt;

&lt;h2&gt;
  
  
  The little prerequisite
&lt;/h2&gt;

&lt;p&gt;For binary search to work, the search space must be sorted or monotonic (consistently increasing or decreasing). If the data is sorted randomly, you can't discard half of the search range.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;Binary search tracks the search space using two index pointers: &lt;code&gt;low/left&lt;/code&gt; (the start of the range) and &lt;code&gt;high/right&lt;/code&gt; (the end of the range). It then executes simple logical steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Init &lt;code&gt;low = 0&lt;/code&gt; and &lt;code&gt;high = N - 1&lt;/code&gt;. &lt;code&gt;N&lt;/code&gt; is the length of the items in your dataset.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Calculate the middle index (&lt;code&gt;mid&lt;/code&gt;) of the current range.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compare the element at &lt;code&gt;mid&lt;/code&gt; with your target value:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Matching case: If the element at the &lt;code&gt;mid&lt;/code&gt; index matches your target, you've found it. Return &lt;code&gt;mid&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Target is smaller: If the element at the &lt;code&gt;mid&lt;/code&gt; index is greater than your target, the target might be in the left half. Narrow your search space by updating the upper boundary: &lt;code&gt;high = mid - 1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Target is larger: If the element at the &lt;code&gt;mid&lt;/code&gt; index is smaller than your target, the target might be in the right half. Narrow your search space by updating the lower boundary: &lt;code&gt;low = mid + 1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Repeat steps 2 and 3 as long as &lt;code&gt;low &amp;lt;= high&lt;/code&gt;. If low surpasses high, the target is not in the array, and you should return a value like &lt;code&gt;-1&lt;/code&gt; to signal that nothing was found.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;Let's write a JavaScript implementation of this algorithm. I'll keep it simple with no noise or clutter.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;binarySearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;target&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="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Input must be a valid array.&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

  &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;low&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// a safe way to find the middle index without risking integer overflow &lt;/span&gt;
    &lt;span class="c1"&gt;// in languages like Java or C++. I know we are using JavaScript here, &lt;/span&gt;
    &lt;span class="c1"&gt;// but the concept behind this approach is good to know&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;high&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;mid&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;current&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;target&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;mid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="k"&gt;else&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;current&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;high&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nx"&gt;low&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&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="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&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;In our code above, we used an inclusive upper bound, meaning the index &lt;code&gt;high&lt;/code&gt; is included in our search loops. Some developers prefer to use an exclusive upper bound where &lt;code&gt;high = arr.length&lt;/code&gt;. If you choose the exclusive approach, you just need to tweak your loop condition to &lt;code&gt;while (low &amp;lt; high)&lt;/code&gt; and update your right-side boundary shift to &lt;code&gt;high = mid&lt;/code&gt;. Both approaches work well, but the exclusive upper bound is better for things like finding where to insert a missing item.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example use
&lt;/h2&gt;

&lt;p&gt;Now, let's test our function. We will try to find the target number &lt;code&gt;7&lt;/code&gt; in this sorted array: &lt;code&gt;[1, 3, 5, 7, 9]&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Iteration 1:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Current boundaries: &lt;code&gt;low = 0&lt;/code&gt;, &lt;code&gt;high = 4&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Calculating the middle index: &lt;code&gt;mid = 0 + Math.floor((4 - 0) / 2) = 2&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Element at &lt;code&gt;mid&lt;/code&gt; (index 2) is &lt;code&gt;5&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Compare &lt;code&gt;5&lt;/code&gt; and target &lt;code&gt;7&lt;/code&gt;. &lt;code&gt;5 &amp;lt; 7&lt;/code&gt;, so our target might be in the right half.&lt;/li&gt;
&lt;li&gt;Update lower boundary: &lt;code&gt;low = mid + 1 = 3&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Iteration 2:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Current boundaries: &lt;code&gt;low = 3&lt;/code&gt;, &lt;code&gt;high = 4&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Calculating the middle index: &lt;code&gt;mid = 3 + Math.floor((4 - 3) / 2) = 3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Element at &lt;code&gt;mid&lt;/code&gt; (index 3) is &lt;code&gt;7&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Compare &lt;code&gt;7&lt;/code&gt; and target &lt;code&gt;7&lt;/code&gt;. They match!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We just did it! 🎉 Our function will successfully stop right here and return the index &lt;code&gt;3&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;And that's Binary Search for you! It's a simple logic change that makes a massive difference in performance once your arrays start getting big. &lt;/p&gt;

&lt;p&gt;See you in the next article, where we will be looking into Merge Sort! ✨&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I'm 13. I Built a Secure Social Network with Node.js 👨🏻‍💻</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Sat, 17 Oct 2026 11:20:02 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/im-13-i-spent-101-days-building-a-secure-social-network-with-nodejs-2d52</link>
      <guid>https://dev.to/codemaster_121482/im-13-i-spent-101-days-building-a-secure-social-network-with-nodejs-2d52</guid>
      <description>&lt;p&gt;Hey dev community! 👋🏻&lt;/p&gt;

&lt;p&gt;I'm Seif, a software engineer with 4 years of experience who absolutely hates vibe-coding and prefers designing architecture by hand. 👨🏻‍💻&lt;/p&gt;

&lt;p&gt;When I initialized the repository for my project, Vlox, my mission was simple: build a clean, fast developer social network and prove that anyone can build safe web apps without heavy client-side frameworks like React.&lt;/p&gt;

&lt;p&gt;Today, the app is fully hosted and live at &lt;a href="https://vlox.containers.snapdeploy.app/" rel="noopener noreferrer"&gt;https://vlox.containers.snapdeploy.app&lt;/a&gt; (the initial load may take 60 to 90 seconds due to a cold start 😅)&lt;/p&gt;

&lt;h2&gt;
  
  
  The tech stack
&lt;/h2&gt;

&lt;p&gt;Instead of standard enterprise software, I picked lightweight tools to power Vlox:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;: I chose Node.js because its asynchronous, non-blocking nature makes it great at handling many requests simultaneously on a single server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;: Cash (a tiny, 3KB DOM manipulation library that mirrors jQuery syntax) paired with classic server-side data handling. Since I don't plan to make Vlox a massive app, this choice is fine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Database&lt;/strong&gt;: MongoDB via Mongoose. Since Vlox doesn't need JOINs, choosing SQL was unnecessary. Plus, MongoDB works great with JavaScript stacks because of its JSON-like format.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  One of my engineering decisions: Using transaction
&lt;/h2&gt;

&lt;p&gt;When building Vlox, I had to make engineering decisions to handle features like post likes.&lt;/p&gt;

&lt;p&gt;On every like, the likes field in the post doc increments by 1 using &lt;code&gt;updateOne&lt;/code&gt; for atomicity and a new document with a unique index is added to the likes collection. &lt;/p&gt;

&lt;p&gt;Some developers might skip transactions here, but that can cause sync problems. If the server crashes, runs into an error, or loses its connection right after the &lt;code&gt;$inc&lt;/code&gt; step but before saving the new like, the data gets broken. &lt;/p&gt;

&lt;p&gt;The like count on the post will be higher than the actual number of likes in the collection. Even worse, because there is no record to prove the user already liked it, they can hit the like button again and fake the count. &lt;/p&gt;

&lt;p&gt;That's why I chose to put both steps inside a transaction. If one part fails, everything goes back to normal automatically. Also, MongoDB checking the unique index across docs won't cause performance issues because Vlox isn't meant for hundreds of thousands of people yet. When engineering, you just need to make the right choices for your specific app scale. &lt;em&gt;Perfecto&lt;/em&gt; 👌🏻&lt;/p&gt;

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

&lt;p&gt;Vlox is completely open source, and I'm happy to answer your technical questions. You can also inspect the code at &lt;a href="https://github.com/Hfs2024/Vlox" rel="noopener noreferrer"&gt;https://github.com/Hfs2024/Vlox&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would really love your honest feedback. Please consider sharing it in the comments below!&lt;/p&gt;

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

</description>
      <category>backend</category>
      <category>javascript</category>
      <category>node</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Everything You Need to Know About Bubble Sort 🫧</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Fri, 16 Oct 2026 09:31:14 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/how-to-safely-implement-bubble-sort-a-full-guide-47kj</link>
      <guid>https://dev.to/codemaster_121482/how-to-safely-implement-bubble-sort-a-full-guide-47kj</guid>
      <description>&lt;p&gt;Hey dev community! 👋🏻&lt;/p&gt;

&lt;p&gt;I'm Seif, a software engineer with 4 years of experience specializing in Node.js, JavaScript and MongoDB. Today, I chose to start a new series that teaches you computer science algorithms for learning and interview preparation. In this article, I'm going to teach you the absolute, most basic sorting algorithm: Bubble Sort.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Bubble Sort?
&lt;/h2&gt;

&lt;p&gt;Bubble Sort is a fundamental sorting algorithm that works by repeatedly stepping through a list, comparing adjacent elements and swapping them if they are in the wrong order. The algorithm gets its name because smaller or larger elements bubble to the top (the end of the list) with each pass. Think of it like gas bubbles rising in a liquid!&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works in detail
&lt;/h2&gt;

&lt;p&gt;Bubble Sort works by using nested loops to iterate through an array. It can sort items in ascending or descending order. For now, let's focus on sorting items in ascending order.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start at the beginning of the array. Compare the first two elements (at index 0 and index 1).&lt;/li&gt;
&lt;li&gt;If the first element is greater than the second element, swap them. If not, leave them as they are.&lt;/li&gt;
&lt;li&gt;Move to the next pair of elements (at index 1 and index 2) and repeat the comparison.&lt;/li&gt;
&lt;li&gt;Continue this until you reach the end of the array. By the end of the first pass, the largest element will have migrated to the last position.&lt;/li&gt;
&lt;li&gt;Repeat the entire process for the remaining unsorted elements. Each pass places the next largest element into its correct final position.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Complexity
&lt;/h2&gt;

&lt;p&gt;Bubble sort is rarely chosen for production use because it is slow. On average and in the worst-case scenario (when the array is reversed), its time complexity is quadratic. In the best case, it can achieve linear time complexity. Also, because it sorts in-place, its space complexity is constant. &lt;em&gt;Perfecto&lt;/em&gt; 👌 &lt;/p&gt;

&lt;h2&gt;
  
  
  Example implementation
&lt;/h2&gt;

&lt;p&gt;Let's design a modern JavaScript implementation of this algorithm. We will focus on sorting numbers, even though the algorithm can be used to sort other data types, such as alphabetizing strings. I also used validation checks like &lt;code&gt;Array.isArray()&lt;/code&gt; to prevent unexpected crashes if a developer accidentally passes a non-array arg.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;bubbleSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&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="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Input must be a valid array.&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;// Validation&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;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;isFinite&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Array must contain numbers only.&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;// Clone the array for immutability&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;swapped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

      &lt;span class="c1"&gt;// Compare and swap&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;current&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;next&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;span class="nx"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="nx"&gt;swapped&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="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="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;swapped&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;break&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;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;sorted&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;We use &lt;code&gt;arr.every(Number.isFinite)&lt;/code&gt; upfront instead of validating numbers inside the nested loops for resource efficiency and preventing wasted work (if an array contains 1000 elements and the very last element is a string, an in-loop check will waste time sorting the first 999 items before finally crashing).&lt;/p&gt;

&lt;h2&gt;
  
  
  Example use
&lt;/h2&gt;

&lt;p&gt;Now, we are ready to test our function. Let's use it to sort this array: &lt;code&gt;[5, 1, 4, 2]&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pass 1:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Compare 5 and 1. &lt;code&gt;5 &amp;gt; 1&lt;/code&gt;, so swap. Now the array is: &lt;code&gt;[1, 5, 4, 2]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Compare 5 and 4. &lt;code&gt;5 &amp;gt; 4&lt;/code&gt;, so swap. Now the array is: &lt;code&gt;[1, 4, 5, 2]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Compare 5 and 2. &lt;code&gt;5 &amp;gt; 2&lt;/code&gt;, so swap. Now the array is: &lt;code&gt;[1, 4, 2, 5]&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pass 2:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Compare 1 and 4. &lt;code&gt;1 &amp;lt; 4&lt;/code&gt;, so no swap. Now the array is: &lt;code&gt;[1, 4, 2, 5]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Compare 4 and 2. &lt;code&gt;4 &amp;gt; 2&lt;/code&gt;, so swap. Now the array is: &lt;code&gt;[1, 2, 4, 5]&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pass 3:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Compare 1 and 2. &lt;code&gt;1 &amp;lt; 2&lt;/code&gt;, so no swap. Now the array is: &lt;code&gt;[1, 2, 4, 5]&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We just did it! 🎉 Our final sorted array is: &lt;code&gt;[1, 2, 4, 5]&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pros and cons of Bubble Sort
&lt;/h2&gt;

&lt;p&gt;Bubble Sort is a great algorithm for learning, but it has many disadvantages, that's why we should avoid it in production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity:&lt;/strong&gt; Incredibly easy to understand and write.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Extra Memory:&lt;/strong&gt; Generally, it performs sorting in-place, but because our implementation above clones the array to ensure immutability, its space complexity is linear.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detects Sorted Lists quickly:&lt;/strong&gt; With optimization, it stops instantly on a sorted list.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Disadvantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bad Efficiency:&lt;/strong&gt; A quadratic time complexity makes it slower for large datasets compared to Merge Sort or Quick Sort.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Excessive Swapping:&lt;/strong&gt; It writes to memory frequently due to constant swapping, which can be mechanically costly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is my wrap on Bubble Sort! While it is rarely used in production code, mastering it gives you foundational algorithmic thinking!&lt;/p&gt;

&lt;p&gt;See you in the next article, where we will transition from sorting data to finding it fast using Binary Search.&lt;/p&gt;

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

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>education</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>Why 90% of Coding Isn't Syntax 💻</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Sat, 10 Oct 2026 05:27:49 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/why-ai-isnt-replacing-developers-and-why-90-of-coding-isnt-syntax-286i</link>
      <guid>https://dev.to/codemaster_121482/why-ai-isnt-replacing-developers-and-why-90-of-coding-isnt-syntax-286i</guid>
      <description>&lt;p&gt;If you've spent any time online lately, you've probably seen people panicking about AI taking over tech. AI isn't stealing your job—it's just taking over the boring parts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Syntax is cheap, logic is everything
&lt;/h2&gt;

&lt;p&gt;An LLM is basically just an advanced autocomplete engine guessing the next likely word. &lt;/p&gt;

&lt;p&gt;When you ask an AI for standard boilerplate code or a basic algorithm, it works instantly. But coding is about 10% syntax and 90% logic. Syntax is just how you talk to a computer; knowing a language doesn't make you an engineer. The hardest parts involve figuring out user needs, designing data flows, and handling edge cases. Give an AI a unique problem outside its training data, and it will just hallucinate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens in production
&lt;/h2&gt;

&lt;p&gt;An AI can write a hundred lines of code instantly, but it won't be on call at 3:00 AM when a memory leak crashes your database. &lt;/p&gt;

&lt;p&gt;You are the one responsible for security and fixing real-world vulnerabilities. Live systems care about surviving actual users and messy networks, not how fast the code was generated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI is still an awesome sidekick
&lt;/h2&gt;

&lt;p&gt;AI is still an incredible tool when used correctly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It helps you build things faster.&lt;/li&gt;
&lt;li&gt;It helps you learn new concepts.&lt;/li&gt;
&lt;li&gt;It acts as a great sounding board when you're stuck.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Real engineering decisions will always belong to humans, no matter how much AI improves.&lt;/p&gt;

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

</description>
      <category>ai</category>
      <category>career</category>
      <category>coding</category>
      <category>programming</category>
    </item>
    <item>
      <title>I Created My X Account 🐦</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Wed, 26 Aug 2026 06:27:25 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/i-created-my-x-account-gb0</link>
      <guid>https://dev.to/codemaster_121482/i-created-my-x-account-gb0</guid>
      <description>&lt;p&gt;I just created my X (Twitter) account to document my journey, share open-source updates, and connect with other developers. &lt;/p&gt;

&lt;p&gt;If you want to support me or just talk about tech, let's connect:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Follow me on X:&lt;/strong&gt; &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://x.com/seifahmedcoding" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fprofile_images%2F2090013641269460992%2FKZagBoLb_200x200.jpg" height="200" class="m-0" width="200"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://x.com/seifahmedcoding" rel="noopener noreferrer" class="c-link"&gt;
            Seif Ahmed (@seifahmedcoding) / X
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Creator of Vlox — the ultimate social network!
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fx.com%2Ffavicon.ico" width="32" height="32"&gt;
          x.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;I'm actively following back everyone from the DEV community who hooks up with me there. Drop your X handle or your latest side project in the comments below so I can check out what you are building too!&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>community</category>
      <category>socialmedia</category>
    </item>
    <item>
      <title>I Built a New Social Network. Try to Crash It 💥</title>
      <dc:creator>Seif Ahmed</dc:creator>
      <pubDate>Mon, 03 Aug 2026 07:11:13 +0000</pubDate>
      <link>https://dev.to/codemaster_121482/i-built-a-real-time-social-network-to-challenge-xtwitter-try-to-crash-it-3m8g</link>
      <guid>https://dev.to/codemaster_121482/i-built-a-real-time-social-network-to-challenge-xtwitter-try-to-crash-it-3m8g</guid>
      <description>&lt;p&gt;Let’s be honest: building a social media app is usually a massive headache. &lt;/p&gt;

&lt;p&gt;I really wanted to see how far I could push modern web architecture and deployment efficiency while keeping my app lightweight. &lt;/p&gt;

&lt;p&gt;The result is &lt;strong&gt;Vlox&lt;/strong&gt;, and it’s live right now if you want to check it out:&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://vlox.containers.snapdeploy.app" rel="noopener noreferrer"&gt;vlox.containers.snapdeploy.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;I decided to keep everything lightweight. That means zero React, zero Next.js, and absolutely no heavy state management tools bloating the client side. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; 100% Vanilla JS driven by Cash—a tiny, open-source library designed as an absurdly small alternative to jQuery for modern browsers. I chose it over heavy frameworks because I prioritize lightweight code and have no plans to make this a massive app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Pure Node.js and Express doing the heavy lifting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; MongoDB with Mongoose keeping the data models straight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Containerized microservices. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The challenge: Help me break it!
&lt;/h3&gt;

&lt;p&gt;I’ve done my best to optimize the the container, but local testing only gets you so far. To really see what this setup can handle, I need raw traffic from real users. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Head over to &lt;strong&gt;&lt;a href="https://vlox.containers.snapdeploy.app" rel="noopener noreferrer"&gt;https://vlox.containers.snapdeploy.app&lt;/a&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Create an account and write a few posts.&lt;/li&gt;
&lt;li&gt;Keep your network tab open! Let me know if you spot any bottlenecks, sluggish queries, or obvious memory leaks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you like the architecture and want to support the project, please consider starring the the repo on &lt;a href="https://github.com/Hfs2024/Vlox" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;! &lt;/p&gt;

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

</description>
      <category>backend</category>
      <category>buildinpublic</category>
      <category>javascript</category>
      <category>webdev</category>
    </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%2Ff7415c1f-526d-4c1c-bb07-8a2214110605.jpg" alt="codemaster_121482 profile" class="crayons-avatar__image" width="400" height="400"&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%2Ff7415c1f-526d-4c1c-bb07-8a2214110605.jpg" class="crayons-avatar__image" alt="" width="400" height="400"&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;
            1 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
  </channel>
</rss>
