<?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: Mohamed Ibrahim</title>
    <description>The latest articles on DEV Community by Mohamed Ibrahim (@moibra).</description>
    <link>https://dev.to/moibra</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F642980%2Fab12473d-4e0b-420f-98ae-ef7ae1acc074.jpeg</url>
      <title>DEV Community: Mohamed Ibrahim</title>
      <link>https://dev.to/moibra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/moibra"/>
    <language>en</language>
    <item>
      <title>Why Your App Might Be Costing More Than You Think</title>
      <dc:creator>Mohamed Ibrahim</dc:creator>
      <pubDate>Tue, 26 May 2026 23:33:47 +0000</pubDate>
      <link>https://dev.to/moibra/why-your-app-might-be-costing-more-than-you-think-1jcm</link>
      <guid>https://dev.to/moibra/why-your-app-might-be-costing-more-than-you-think-1jcm</guid>
      <description>&lt;h2&gt;
  
  
  Understanding Edge Requests, Bandwidth, CDN, Fast Origin Transfer, and Why Your Next.js App Might Be Costing More Than You Think
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;A deep but beginner-friendly guide to how modern web infrastructure actually works — especially on platforms like &lt;a href="https://vercel.com?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When I first started deploying apps, I thought hosting was simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload website&lt;/li&gt;
&lt;li&gt;Users open it&lt;/li&gt;
&lt;li&gt;Done&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But after deploying real-world apps — especially with Next.js on platforms like &lt;a href="https://vercel.com?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; — I started seeing terms like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edge Requests&lt;/li&gt;
&lt;li&gt;Bandwidth&lt;/li&gt;
&lt;li&gt;Fast Origin Transfer&lt;/li&gt;
&lt;li&gt;CDN&lt;/li&gt;
&lt;li&gt;Serverless Computing&lt;/li&gt;
&lt;li&gt;Edge Functions&lt;/li&gt;
&lt;li&gt;Cache Hits &amp;amp; Misses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first, all of this felt confusing.&lt;/p&gt;

&lt;p&gt;Why is a simple website making thousands of requests?&lt;br&gt;
Why does bandwidth suddenly spike?&lt;br&gt;
Why can a Next.js app become expensive faster than expected?&lt;br&gt;
Why does enabling Cloudflare sometimes reduce costs dramatically?&lt;/p&gt;

&lt;p&gt;This article is the guide I wish I had earlier.&lt;/p&gt;

&lt;p&gt;We’ll go deep — but explain everything in simple language.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Internet Is Basically Moving Files Around
&lt;/h2&gt;

&lt;p&gt;At its core, the web is simpler than it looks.&lt;/p&gt;

&lt;p&gt;Every time someone visits your site:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Their browser sends requests&lt;/li&gt;
&lt;li&gt;Your server responds with files&lt;/li&gt;
&lt;li&gt;The browser renders the page&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those files might include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Fonts&lt;/li&gt;
&lt;li&gt;API responses&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The internet is basically:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Requests going in, data coming out.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Everything else is optimization.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Is a Request?
&lt;/h2&gt;

&lt;p&gt;A request is simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Hey server, give me this thing.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Your homepage might need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;index.html&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;main.js&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;styles.css&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;logo.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;10 product images&lt;/li&gt;
&lt;li&gt;API data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That single page visit could easily generate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;20–100 requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not 1.&lt;/p&gt;

&lt;p&gt;This surprises many beginners.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Are Edge Requests?
&lt;/h2&gt;

&lt;p&gt;Edge Requests are requests handled by servers close to the user.&lt;/p&gt;

&lt;p&gt;Instead of every user connecting directly to your main server, platforms use global infrastructure.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User in Egypt&lt;/li&gt;
&lt;li&gt;Your server is in the US&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without edge infrastructure:&lt;/p&gt;

&lt;p&gt;Egypt → US → Egypt&lt;/p&gt;

&lt;p&gt;That’s slower.&lt;/p&gt;

&lt;p&gt;With edge infrastructure:&lt;/p&gt;

&lt;p&gt;Egypt → Nearby Edge Server&lt;/p&gt;

&lt;p&gt;Much faster.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Does “Edge” Actually Mean?
&lt;/h2&gt;

&lt;p&gt;“Edge” means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Servers distributed around the world near users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Companies like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vercel.com?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fastly.com?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Fastly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.akamai.com?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Akamai&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;have data centers globally.&lt;/p&gt;

&lt;p&gt;These edge servers can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cache files&lt;/li&gt;
&lt;li&gt;Run code&lt;/li&gt;
&lt;li&gt;Return responses&lt;/li&gt;
&lt;li&gt;Block attacks&lt;/li&gt;
&lt;li&gt;Compress assets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reduces latency massively.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Is a CDN?
&lt;/h2&gt;

&lt;p&gt;CDN = Content Delivery Network.&lt;/p&gt;

&lt;p&gt;A CDN is basically:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A network of edge servers that cache and deliver content faster.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of downloading your image from one server in one country:&lt;/p&gt;

&lt;p&gt;The CDN stores copies worldwide.&lt;/p&gt;

&lt;p&gt;So users download from the nearest location.&lt;/p&gt;


&lt;h2&gt;
  
  
  Simple CDN Example
&lt;/h2&gt;

&lt;p&gt;Without CDN:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → Main Server → Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With CDN:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → Nearby CDN Server → Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Huge difference.&lt;/p&gt;

&lt;p&gt;Especially for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Fonts&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why CDNs Matter So Much
&lt;/h2&gt;

&lt;p&gt;CDNs improve:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Speed
&lt;/h3&gt;

&lt;p&gt;Closer servers = lower latency.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Lower Server Load
&lt;/h3&gt;

&lt;p&gt;Your origin server gets fewer requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Lower Bandwidth Usage
&lt;/h3&gt;

&lt;p&gt;Cached content avoids repeated transfers from origin.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Better Scalability
&lt;/h3&gt;

&lt;p&gt;Millions of users become manageable.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. DDoS Protection
&lt;/h3&gt;

&lt;p&gt;Many CDNs block malicious traffic automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Bandwidth?
&lt;/h2&gt;

&lt;p&gt;Bandwidth is the amount of data transferred.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Image = 2MB&lt;/li&gt;
&lt;li&gt;1000 users download it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bandwidth used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2MB × 1000 = 2000MB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s about 2GB.&lt;/p&gt;

&lt;p&gt;Bandwidth is usually one of the biggest hosting costs.&lt;/p&gt;

&lt;p&gt;Especially for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;li&gt;AI apps&lt;/li&gt;
&lt;li&gt;File downloads&lt;/li&gt;
&lt;li&gt;Large APIs&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Images Destroy Bandwidth
&lt;/h2&gt;

&lt;p&gt;Developers massively underestimate image costs.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Homepage:
- 20 images
- Each image = 500KB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10MB per visit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;10,000 visits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100GB bandwidth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From images alone.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Fast Origin Transfer?
&lt;/h2&gt;

&lt;p&gt;This term is common on &lt;a href="https://vercel.com?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To understand it, we first need to understand “Origin.”&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is the Origin Server?
&lt;/h2&gt;

&lt;p&gt;The Origin is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The main source server where the original content exists.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → CDN → Origin Server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the CDN already has cached content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CDN → User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No origin needed.&lt;/p&gt;

&lt;p&gt;But if the CDN misses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CDN → Origin → CDN → User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That transfer from origin is important.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fast Origin Transfer Explained Simply
&lt;/h2&gt;

&lt;p&gt;Fast Origin Transfer is basically:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Data transferred from your origin infrastructure to edge locations quickly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This often happens when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cache misses occur&lt;/li&gt;
&lt;li&gt;Dynamic content is generated&lt;/li&gt;
&lt;li&gt;Server-side rendering runs&lt;/li&gt;
&lt;li&gt;Functions execute&lt;/li&gt;
&lt;li&gt;Data isn’t cached&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your cache strategy is poor:&lt;/p&gt;

&lt;p&gt;Your origin gets hammered.&lt;/p&gt;

&lt;p&gt;Costs rise fast.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cache Hits vs Cache Misses
&lt;/h2&gt;

&lt;p&gt;This is one of the most important concepts in web performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cache Hit
&lt;/h3&gt;

&lt;p&gt;The CDN already has the file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → CDN → Done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fast and cheap.&lt;/p&gt;




&lt;h3&gt;
  
  
  Cache Miss
&lt;/h3&gt;

&lt;p&gt;The CDN doesn’t have the file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → CDN → Origin Server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Slower and more expensive.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Next.js Can Increase Costs
&lt;/h2&gt;

&lt;p&gt;This is where things get interesting.&lt;/p&gt;

&lt;p&gt;Next.js is extremely powerful.&lt;/p&gt;

&lt;p&gt;But many features trade simplicity for infrastructure complexity.&lt;/p&gt;




&lt;h2&gt;
  
  
  Static vs Dynamic Pages
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Static Page
&lt;/h3&gt;

&lt;p&gt;Generated once.&lt;/p&gt;

&lt;p&gt;Same for everyone.&lt;/p&gt;

&lt;p&gt;Cheap.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Blog article
Landing page
Documentation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perfect for CDN caching.&lt;/p&gt;




&lt;h3&gt;
  
  
  Dynamic Page
&lt;/h3&gt;

&lt;p&gt;Generated per request.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dashboard
Personalized feed
Authenticated pages
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These often require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serverless functions&lt;/li&gt;
&lt;li&gt;Database calls&lt;/li&gt;
&lt;li&gt;Edge compute&lt;/li&gt;
&lt;li&gt;Origin traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Much more expensive.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Server Components Can Cause More Work
&lt;/h2&gt;

&lt;p&gt;Modern Next.js apps often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetch data server-side&lt;/li&gt;
&lt;li&gt;Stream UI&lt;/li&gt;
&lt;li&gt;Revalidate content&lt;/li&gt;
&lt;li&gt;Use middleware&lt;/li&gt;
&lt;li&gt;Run authentication checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates more compute operations.&lt;/p&gt;

&lt;p&gt;Even if the app &lt;em&gt;looks&lt;/em&gt; simple.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Compute?
&lt;/h2&gt;

&lt;p&gt;Compute means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Server resources used to execute code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU usage&lt;/li&gt;
&lt;li&gt;Memory usage&lt;/li&gt;
&lt;li&gt;Function execution time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When code runs:&lt;/p&gt;

&lt;p&gt;You consume compute.&lt;/p&gt;




&lt;h2&gt;
  
  
  Static File vs Compute
&lt;/h2&gt;

&lt;p&gt;Serving a static image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Very cheap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running server code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;More expensive
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running AI inference:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Very expensive
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Serverless Functions Explained
&lt;/h2&gt;

&lt;p&gt;Platforms like &lt;a href="https://vercel.com?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; heavily use serverless architecture.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;One always-running server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Functions that run only when needed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto scaling&lt;/li&gt;
&lt;li&gt;Easier deployments&lt;/li&gt;
&lt;li&gt;Pay-per-use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Disadvantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cold starts&lt;/li&gt;
&lt;li&gt;Higher costs at scale&lt;/li&gt;
&lt;li&gt;Complex billing metrics&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Middleware Can Accidentally Explode Edge Requests
&lt;/h2&gt;

&lt;p&gt;This is a huge issue in many Next.js apps.&lt;/p&gt;

&lt;p&gt;If middleware runs on every request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Every image
Every page
Every asset
Every API request
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then edge requests skyrocket.&lt;/p&gt;

&lt;p&gt;Developers often don’t realize this.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example of a Bad Middleware Setup
&lt;/h2&gt;

&lt;p&gt;Imagine middleware checking auth for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/dashboard&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/logo.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/fonts/inter.woff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/favicon.ico&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now every asset triggers compute.&lt;/p&gt;

&lt;p&gt;That’s expensive.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Authentication Increases Costs
&lt;/h2&gt;

&lt;p&gt;Auth systems often require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cookie parsing&lt;/li&gt;
&lt;li&gt;Token validation&lt;/li&gt;
&lt;li&gt;Session fetching&lt;/li&gt;
&lt;li&gt;Database reads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Doing this globally at the edge:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Millions of compute executions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;even on small projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Cloudflare Can Reduce Costs Dramatically
&lt;/h2&gt;

&lt;p&gt;Many developers place &lt;a href="https://www.cloudflare.com?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Cloudflare&lt;/a&gt; in front of &lt;a href="https://vercel.com?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because Cloudflare can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cache aggressively&lt;/li&gt;
&lt;li&gt;Block bots&lt;/li&gt;
&lt;li&gt;Reduce origin hits&lt;/li&gt;
&lt;li&gt;Compress assets&lt;/li&gt;
&lt;li&gt;Filter traffic before Vercel sees it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edge Requests&lt;/li&gt;
&lt;li&gt;Bandwidth&lt;/li&gt;
&lt;li&gt;Origin Transfer&lt;/li&gt;
&lt;li&gt;Compute usage&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  But There’s a Tradeoff
&lt;/h2&gt;

&lt;p&gt;Using Cloudflare in front of Vercel can sometimes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Break automatic optimizations&lt;/li&gt;
&lt;li&gt;Affect analytics accuracy&lt;/li&gt;
&lt;li&gt;Interfere with bot protection&lt;/li&gt;
&lt;li&gt;Cause caching confusion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So it must be configured carefully.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Bots Increase Costs
&lt;/h2&gt;

&lt;p&gt;A shocking amount of internet traffic is bots.&lt;/p&gt;

&lt;p&gt;Bots can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crawl pages&lt;/li&gt;
&lt;li&gt;Spam APIs&lt;/li&gt;
&lt;li&gt;Scrape content&lt;/li&gt;
&lt;li&gt;Hammer dynamic routes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even if you have few real users.&lt;/p&gt;

&lt;p&gt;Without protection:&lt;/p&gt;

&lt;p&gt;Costs rise quickly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Caching Is Everything
&lt;/h2&gt;

&lt;p&gt;Modern web performance is basically:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“How much can we avoid recomputing?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Good caching means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fewer requests&lt;/li&gt;
&lt;li&gt;Lower compute&lt;/li&gt;
&lt;li&gt;Lower bandwidth&lt;/li&gt;
&lt;li&gt;Faster pages&lt;/li&gt;
&lt;li&gt;Lower bills&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Ideal Architecture
&lt;/h2&gt;

&lt;p&gt;The cheapest scalable architecture usually looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CDN Cache First
↓
Static Assets
↓
Minimal Dynamic Logic
↓
Efficient APIs
↓
Database Only When Necessary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why Static Sites Scale So Well
&lt;/h2&gt;

&lt;p&gt;A static site can handle massive traffic cheaply because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Files are prebuilt&lt;/li&gt;
&lt;li&gt;CDN serves everything&lt;/li&gt;
&lt;li&gt;Minimal compute needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why documentation sites are so cheap.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why AI Apps Become Expensive Fast
&lt;/h2&gt;

&lt;p&gt;AI apps combine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heavy compute&lt;/li&gt;
&lt;li&gt;Large bandwidth&lt;/li&gt;
&lt;li&gt;Long requests&lt;/li&gt;
&lt;li&gt;Streaming responses&lt;/li&gt;
&lt;li&gt;GPUs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Costs rise dramatically compared to normal apps.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Reduce Vercel Costs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Cache Aggressively
&lt;/h3&gt;

&lt;p&gt;Use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static rendering&lt;/li&gt;
&lt;li&gt;ISR&lt;/li&gt;
&lt;li&gt;CDN caching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;whenever possible.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Avoid Unnecessary Middleware
&lt;/h3&gt;

&lt;p&gt;Scope middleware carefully.&lt;/p&gt;

&lt;p&gt;Never run it globally unless necessary.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Optimize Images
&lt;/h3&gt;

&lt;p&gt;Use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compression&lt;/li&gt;
&lt;li&gt;WebP&lt;/li&gt;
&lt;li&gt;AVIF&lt;/li&gt;
&lt;li&gt;Lazy loading&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Images are bandwidth killers.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Avoid Dynamic Rendering Everywhere
&lt;/h3&gt;

&lt;p&gt;Not every page needs SSR.&lt;/p&gt;

&lt;p&gt;Static pages are cheaper and faster.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Use Cloudflare Carefully
&lt;/h3&gt;

&lt;p&gt;Cloudflare can massively reduce costs if configured properly.&lt;/p&gt;

&lt;p&gt;Especially for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bots&lt;/li&gt;
&lt;li&gt;Static assets&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;DDoS protection&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  6. Monitor Analytics Constantly
&lt;/h3&gt;

&lt;p&gt;Most developers only discover problems after huge bills.&lt;/p&gt;

&lt;p&gt;Watch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edge Requests&lt;/li&gt;
&lt;li&gt;Function Invocations&lt;/li&gt;
&lt;li&gt;Cache Hit Ratio&lt;/li&gt;
&lt;li&gt;Bandwidth&lt;/li&gt;
&lt;li&gt;Bot Traffic&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Biggest Beginner Mistake
&lt;/h2&gt;

&lt;p&gt;Many developers optimize for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer Experience
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Infrastructure Efficiency
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modern frameworks make powerful features incredibly easy.&lt;/p&gt;

&lt;p&gt;But “easy” doesn’t mean “cheap.”&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Modern web infrastructure is fascinating because almost everything comes down to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Moving data&lt;/li&gt;
&lt;li&gt;Avoiding unnecessary work&lt;/li&gt;
&lt;li&gt;Caching intelligently&lt;/li&gt;
&lt;li&gt;Running compute efficiently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CDN&lt;/li&gt;
&lt;li&gt;Edge&lt;/li&gt;
&lt;li&gt;Compute&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Origin Transfer&lt;/li&gt;
&lt;li&gt;Serverless infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;you start seeing the internet differently.&lt;/p&gt;

&lt;p&gt;You realize:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Performance and cost are deeply connected.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And sometimes the fastest app is simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The app doing the least work possible.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>devops</category>
    </item>
    <item>
      <title>I Got Tired of Heavy Design Tools😩… So I Built My Own</title>
      <dc:creator>Mohamed Ibrahim</dc:creator>
      <pubDate>Sun, 24 May 2026 06:00:00 +0000</pubDate>
      <link>https://dev.to/moibra/i-got-tired-of-heavy-design-tools-so-i-built-my-own-1cfi</link>
      <guid>https://dev.to/moibra/i-got-tired-of-heavy-design-tools-so-i-built-my-own-1cfi</guid>
      <description>&lt;p&gt;Like the title says, I got tired of heavy design tools… so I built my own.&lt;/p&gt;

&lt;p&gt;I wanted something simple, fast, and focused — no complicated setup, no unnecessary features, &lt;strong&gt;and absolutely NO TIME WASTED.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every time I wanted to create a quick transparent PNG, logo mockup, or simple social media graphic, I ended up wasting time.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open a design tool.
&lt;/li&gt;
&lt;li&gt;Create an account.
&lt;/li&gt;
&lt;li&gt;Verify email.
&lt;/li&gt;
&lt;li&gt;Wait for assets to load.
&lt;/li&gt;
&lt;li&gt;Deal with unnecessary features.&lt;/li&gt;
&lt;li&gt;Get annoying emails every week trying to sell you premium features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;UGHHHH 😩😩😩&lt;/p&gt;

&lt;p&gt;Sometimes I just wanted to open a website and start designing instantly.&lt;/p&gt;

&lt;p&gt;So I built something for myself.&lt;/p&gt;

&lt;p&gt;And that project became &lt;a href="https://editsify.com/" rel="noopener noreferrer"&gt;Editsify&lt;/a&gt;.&lt;/p&gt;




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

&lt;p&gt;Editsify is a lightweight browser-based design tool focused on simplicity and speed.&lt;/p&gt;

&lt;p&gt;The goal was simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the website&lt;/li&gt;
&lt;li&gt;Start designing immediately&lt;/li&gt;
&lt;li&gt;Export transparent PNG images easily&lt;/li&gt;
&lt;li&gt;No sign-up&lt;/li&gt;
&lt;li&gt;No complicated dashboard&lt;/li&gt;
&lt;li&gt;No unnecessary features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything runs directly in your browser.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built It
&lt;/h2&gt;

&lt;p&gt;Most design tools today are powerful — but sometimes &lt;em&gt;too powerful&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If you're trying to quickly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a transparent PNG&lt;/li&gt;
&lt;li&gt;Make a simple thumbnail element&lt;/li&gt;
&lt;li&gt;Design a logo concept&lt;/li&gt;
&lt;li&gt;Create social media assets&lt;/li&gt;
&lt;li&gt;Share a quick design with someone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...you probably don't need a massive editor with hundreds of menus.&lt;/p&gt;

&lt;p&gt;I wanted something minimal, fast, and distraction-free.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Feature I Personally Love Most
&lt;/h2&gt;

&lt;p&gt;One thing I really wanted was easy design sharing.&lt;/p&gt;

&lt;p&gt;With Editsify, you can share your design with another person instantly so they can preview it or continue working on it.&lt;/p&gt;

&lt;p&gt;And the interesting part?&lt;/p&gt;

&lt;p&gt;You still don't need an account.&lt;/p&gt;

&lt;p&gt;No login system.&lt;br&gt;&lt;br&gt;
No forced registration.&lt;br&gt;&lt;br&gt;
No complicated setup.&lt;/p&gt;

&lt;p&gt;Just create and share.&lt;/p&gt;




&lt;h2&gt;
  
  
  Everything is Stored Locally
&lt;/h2&gt;

&lt;p&gt;Another thing I care about a lot is privacy and speed.&lt;/p&gt;

&lt;p&gt;Your design data is stored directly inside your browser instead of being uploaded somewhere automatically.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster experience&lt;/li&gt;
&lt;li&gt;Less waiting&lt;/li&gt;
&lt;li&gt;More privacy&lt;/li&gt;
&lt;li&gt;Simpler workflow&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Who is This Tool For?
&lt;/h2&gt;

&lt;p&gt;I think Editsify is useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content creators&lt;/li&gt;
&lt;li&gt;YouTubers&lt;/li&gt;
&lt;li&gt;Designers who need quick assets&lt;/li&gt;
&lt;li&gt;Developers making UI elements&lt;/li&gt;
&lt;li&gt;People who just want transparent PNG images fast&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Especially if you hate wasting time before starting actual work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Still Improving It
&lt;/h2&gt;

&lt;p&gt;The project is still growing, and I’m continuously improving the editor and adding new features.&lt;/p&gt;

&lt;p&gt;I mainly built it because I personally needed something simpler than traditional design tools.&lt;/p&gt;

&lt;p&gt;But now other people are starting to use it too, which is honestly exciting to see.&lt;/p&gt;

&lt;p&gt;I’ve also been thinking about making parts of Editsify open source in the future so developers can contribute and build cool things around it.&lt;/p&gt;

&lt;p&gt;If the project gets enough support and community interest, I’d genuinely love to make that happen.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;If you want to test it yourself:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://editsify.com" rel="noopener noreferrer"&gt;Editsify&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d genuinely love to hear feedback, ideas, or feature suggestions.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>design</category>
      <category>ai</category>
    </item>
    <item>
      <title>How I Built a Multi-Language Code Playground with Next.js 🚀</title>
      <dc:creator>Mohamed Ibrahim</dc:creator>
      <pubDate>Thu, 29 Jan 2026 06:00:00 +0000</pubDate>
      <link>https://dev.to/moibra/how-i-built-a-multi-language-code-playground-with-nextjs-5779</link>
      <guid>https://dev.to/moibra/how-i-built-a-multi-language-code-playground-with-nextjs-5779</guid>
      <description>&lt;p&gt;We've all seen them: sites like &lt;strong&gt;CodePen or LeetCode&lt;/strong&gt; where you can write code and see the output instantly. As a developer, I wondered: &lt;strong&gt;"How hard is it to build one from scratch?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It turns out, integrating an editor is easy, but making it &lt;strong&gt;actually run code&lt;/strong&gt; (especially languages like Java or C++) is where the real fun begins. &lt;/p&gt;

&lt;p&gt;Today, I’m sharing how I built &lt;strong&gt;Next.js Monaco Editor&lt;/strong&gt;, a platform that doesn't just edit code—it breathes life into it.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠 The Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Framework&lt;/strong&gt;: Next.js (App Router)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editor&lt;/strong&gt;: &lt;code&gt;@monaco-editor/react&lt;/code&gt; (The engine behind VS Code)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling&lt;/strong&gt;: Tailwind CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Execution&lt;/strong&gt;: Local (for JS) + &lt;a href="https://github.com/engineer-man/piston" rel="noopener noreferrer"&gt;Piston API&lt;/a&gt; (for Java, C#, C++)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛑 The Problem: "Where does the code run?"
&lt;/h2&gt;

&lt;p&gt;When I started, I faced a dilemma:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Running locally (eval)&lt;/strong&gt;: Great for JavaScript, but what about Java or C++? You can't run those in a standard browser environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Building a backend&lt;/strong&gt;: Setting up Docker containers to safely execute untrusted code is a nightmare for a frontend-focused project.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  ✅ The Solution: A Hybrid Approach
&lt;/h2&gt;

&lt;p&gt;I decided to split the execution logic to get the best of both worlds:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Local Speed (JavaScript &amp;amp; HTML)
&lt;/h3&gt;

&lt;p&gt;For JavaScript, I used a clean &lt;code&gt;new Function()&lt;/code&gt; approach to capture console logs without re-rendering the whole app. For HTML, I implemented a &lt;strong&gt;Live Preview&lt;/strong&gt; using an &lt;code&gt;iframe&lt;/code&gt; with strict &lt;code&gt;sandbox&lt;/code&gt; attributes to keep the main site secure.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Remote Power (Java, C#, C++)
&lt;/h3&gt;

&lt;p&gt;To support compiled languages, I integrated the &lt;strong&gt;Piston API&lt;/strong&gt;. It’s a high-performance code execution engine that allowed me to send code snippets and receive execution results instantly, without managing a single server.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗 Clean Code vs. Spagetti
&lt;/h2&gt;

&lt;p&gt;As the features grew, the &lt;code&gt;page.tsx&lt;/code&gt; became a mess. One of my favorite parts of this project was the &lt;strong&gt;Refactoring Phase&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;I decoupled the project into logical modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;lib/api.ts&lt;/code&gt;: Pure logic for Piston communication.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lib/funcs.ts&lt;/code&gt;: Dedicated logic for JS execution.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lib/constants.ts&lt;/code&gt;: A single source of truth for language versions and starter templates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This made the codebase so clean that adding a new language like Python or Go now takes literally &lt;strong&gt;30 seconds&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔒 Security First
&lt;/h2&gt;

&lt;p&gt;One big question was: &lt;strong&gt;"Can users hack my site?"&lt;/strong&gt; &lt;br&gt;
Since it's a frontend-only app, the risk is minimal, but I still implemented:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Iframe Sandboxing&lt;/strong&gt;: &lt;code&gt;sandbox="allow-scripts"&lt;/code&gt; prevents executed HTML from stealing cookies or accessing local storage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-Side Execution&lt;/strong&gt;: Everything runs either in the user's browser or an isolated remote container.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌟 Takeaways
&lt;/h2&gt;

&lt;p&gt;Building this project taught me that you don't always need a complex backend to create powerful tools. By leveraging great APIs and robust libraries like Monaco, you can build pro-grade developer tools right in the browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔗 Check out the Project!
&lt;/h3&gt;

&lt;p&gt;I've open-sourced the entire codebase. If you find this helpful or want to use it as a template for your next project, &lt;strong&gt;please give it a star on GitHub!&lt;/strong&gt; ⭐&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/Mo-Ibra/next-monaco-editor.git" rel="noopener noreferrer"&gt;GitHub Repository: next-monaco-editor&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What should I add next? Python support? A dark mode toggle? Let me know in the comments!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Best game engine to start with in 2026?</title>
      <dc:creator>Mohamed Ibrahim</dc:creator>
      <pubDate>Sun, 25 Jan 2026 21:10:57 +0000</pubDate>
      <link>https://dev.to/moibra/best-game-engine-to-start-with-in-2026-3hne</link>
      <guid>https://dev.to/moibra/best-game-engine-to-start-with-in-2026-3hne</guid>
      <description>&lt;p&gt;I’m getting into game development (mainly mobile &amp;amp; indie games) and I’m trying to choose a game engine.&lt;/p&gt;

&lt;p&gt;Between engines like Godot, Unity, Unreal, LibGDX, etc:&lt;/p&gt;

&lt;p&gt;Which one would you recommend today?&lt;/p&gt;

&lt;p&gt;And why?&lt;/p&gt;

&lt;p&gt;I’m mostly interested in 2D / 2.5D, good performance, and a smooth learning curve.&lt;/p&gt;

&lt;p&gt;Thanks! 🙏&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>🚀 I Built a Clean &amp; Modern Next.js E-commerce Template — And You Can Use It or Contribute!</title>
      <dc:creator>Mohamed Ibrahim</dc:creator>
      <pubDate>Sat, 07 Jun 2025 18:22:34 +0000</pubDate>
      <link>https://dev.to/moibra/i-built-a-clean-modern-nextjs-e-commerce-template-and-you-can-use-it-or-contribute-2d0i</link>
      <guid>https://dev.to/moibra/i-built-a-clean-modern-nextjs-e-commerce-template-and-you-can-use-it-or-contribute-2d0i</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Building a clean, scalable, and modern e-commerce frontend with &lt;strong&gt;Next.js App Router&lt;/strong&gt; is not always straightforward.&lt;/p&gt;

&lt;p&gt;You often find:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Messy component structures&lt;/li&gt;
&lt;li&gt;Poor responsiveness&lt;/li&gt;
&lt;li&gt;Overcomplicated state management&lt;/li&gt;
&lt;li&gt;Lack of form validation&lt;/li&gt;
&lt;li&gt;And worst of all: bad DX (Developer Experience)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I decided to fix that by creating a &lt;strong&gt;clean, modern e-commerce template&lt;/strong&gt; using &lt;strong&gt;Next.js 15&lt;/strong&gt;, &lt;strong&gt;Tailwind CSS&lt;/strong&gt;, and &lt;strong&gt;shadcn/ui&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 The Idea
&lt;/h2&gt;

&lt;p&gt;I wanted something that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is easy to extend (e.g. for your own store or client work)&lt;/li&gt;
&lt;li&gt;Has a clean codebase that respects file structure&lt;/li&gt;
&lt;li&gt;Solves common UI problems (cart, filtering, responsive design)&lt;/li&gt;
&lt;li&gt;Uses up-to-date Next.js features (App Router, Server Components, etc.)&lt;/li&gt;
&lt;li&gt;Just works out of the box&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔧 What I Built
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;✅ A production-ready, minimal, modern E-commerce frontend with all the essentials.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🛒 &lt;strong&gt;Features include:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean homepage with CTA and categories&lt;/li&gt;
&lt;li&gt;Fully responsive layout&lt;/li&gt;
&lt;li&gt;Product catalog and detail pages&lt;/li&gt;
&lt;li&gt;LocalStorage-powered cart (via React Context)&lt;/li&gt;
&lt;li&gt;Advanced filtering (category, price)&lt;/li&gt;
&lt;li&gt;Full-text search&lt;/li&gt;
&lt;li&gt;Multi-step checkout (in progress)&lt;/li&gt;
&lt;li&gt;Component-based structure&lt;/li&gt;
&lt;li&gt;TypeScript and strict types&lt;/li&gt;
&lt;li&gt;Form validation using React Hook Form + Zod&lt;/li&gt;
&lt;li&gt;Deployed on Vercel&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📸 Screenshots
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Here's a sneak peek 👇&lt;/p&gt;
&lt;/blockquote&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.amazonaws.com%2Fuploads%2Farticles%2Fndfm9l95rpufqgvlipaq.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.amazonaws.com%2Fuploads%2Farticles%2Fndfm9l95rpufqgvlipaq.png" alt="Cart Page" width="800" height="394"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fma9ct3byfz371a4mbh0d.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.amazonaws.com%2Fuploads%2Farticles%2Fma9ct3byfz371a4mbh0d.png" alt="Product Detail" width="800" height="393"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61q9yheow9s48k35lg5q.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.amazonaws.com%2Fuploads%2Farticles%2F61q9yheow9s48k35lg5q.png" alt="Search Page" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍💻 Technologies Used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 15&lt;/strong&gt; with App Router&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailwind CSS&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;shadcn/ui&lt;/strong&gt; for reusable UI&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lucide icons&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Context&lt;/strong&gt; for cart state&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TypeScript&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;React Hook Form + Zod&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💬 Why This Might Help You
&lt;/h2&gt;

&lt;p&gt;If you’re:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A frontend developer tired of setting up from scratch every time&lt;/li&gt;
&lt;li&gt;A freelancer looking for a starter template&lt;/li&gt;
&lt;li&gt;A team looking to build MVPs faster&lt;/li&gt;
&lt;li&gt;Or just curious how to structure a modern Next.js 15 project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This repo might save you hours.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌟 Star it, Fork it, Use it, Improve it!
&lt;/h2&gt;

&lt;p&gt;Here’s the repo:&lt;br&gt;
👉 &lt;a href="https://github.com/Mo-Ibra/nextjs-clean-ecommerce" rel="noopener noreferrer"&gt;https://github.com/Mo-Ibra/nextjs-clean-ecommerce&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find it helpful — &lt;strong&gt;please give it a star ⭐&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If you want to contribute — &lt;strong&gt;PRs are welcome!&lt;/strong&gt; 🙌&lt;br&gt;&lt;br&gt;
If you have feedback — drop it in the &lt;a href="https://github.com/Mo-Ibra/nextjs-clean-ecommerce/issues" rel="noopener noreferrer"&gt;Issues&lt;/a&gt; section.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ What’s Next?
&lt;/h2&gt;

&lt;p&gt;Planned features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checkout flow (in progress)&lt;/li&gt;
&lt;li&gt;Wishlist support&lt;/li&gt;
&lt;li&gt;Auth system (maybe NextAuth)&lt;/li&gt;
&lt;li&gt;Stripe integration&lt;/li&gt;
&lt;li&gt;Admin dashboard&lt;/li&gt;
&lt;li&gt;Product reviews&lt;/li&gt;
&lt;li&gt;Dark mode&lt;/li&gt;
&lt;li&gt;Multi-language support&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🙌 Let’s Build It Together
&lt;/h2&gt;

&lt;p&gt;I built the foundation — now I’d love your help in making it better.&lt;br&gt;&lt;br&gt;
If you're into clean code, DX, and e-commerce — feel free to jump in.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Built with ❤️ by &lt;a href="https://github.com/Mo-Ibra" rel="noopener noreferrer"&gt;@Mo-Ibra&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Let’s connect on &lt;a href="https://github.com/Mo-Ibra" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; or in the comments!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Top AI-Powered Chrome Extensions for Web Developers 🚀</title>
      <dc:creator>Mohamed Ibrahim</dc:creator>
      <pubDate>Sun, 20 Apr 2025 07:00:00 +0000</pubDate>
      <link>https://dev.to/moibra/top-ai-powered-chrome-extensions-for-web-developers-343e</link>
      <guid>https://dev.to/moibra/top-ai-powered-chrome-extensions-for-web-developers-343e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Boost your coding speed, productivity, and creativity with these smart browser tools.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI is no longer just a buzzword — it’s here, and it’s helping developers code faster, debug smarter, and even write documentation. These &lt;strong&gt;AI-powered Chrome extensions&lt;/strong&gt; can supercharge your web development workflow with minimal effort.&lt;/p&gt;




&lt;h3&gt;
  
  
  🚀 1. &lt;strong&gt;GitHub Copilot&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Suggests code and entire functions as you type.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI Power:&lt;/strong&gt; OpenAI Codex&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Best For:&lt;/strong&gt; Auto-completing functions, writing boilerplate, learning new code patterns&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://github.com/features/copilot" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🔍 2. &lt;strong&gt;WebChatGPT&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Adds real-time web results to your ChatGPT responses.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI Power:&lt;/strong&gt; Enhances ChatGPT with live web access&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Best For:&lt;/strong&gt; Researching frameworks, libraries, and up-to-date docs&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://chromewebstore.google.com/detail/webchatgpt-chatgpt-with-i/lpfemeioodjbpieminkklglpmhlngfcn" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ✍️ 3. &lt;strong&gt;Monica&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Offers AI chat support and can summarize, explain, or translate selected text.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI Power:&lt;/strong&gt; ChatGPT integration&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Best For:&lt;/strong&gt; Understanding documentation, rewriting content, email drafting&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://monica.im/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  💬 4. &lt;strong&gt;AIPRM for ChatGPT&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Adds curated prompt templates for developers, SEOs, and marketers.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI Power:&lt;/strong&gt; Custom ChatGPT prompts&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Best For:&lt;/strong&gt; Speeding up repetitive requests, inspiration for code fixes&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://www.aiprm.com/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  💡 5. &lt;strong&gt;Blackbox&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Lets you copy code from videos or any website using AI.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI Power:&lt;/strong&gt; OCR + ML-based code detection&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Best For:&lt;/strong&gt; Extracting code from tutorials and YouTube&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://www.useblackbox.io/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  📋 6. &lt;strong&gt;CodeWhisperer (AWS)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Auto-suggests code based on comments and your current line.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI Power:&lt;/strong&gt; AWS-trained LLM&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Best For:&lt;/strong&gt; Backend developers using AWS tools&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://aws.amazon.com/codewhisperer/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 7. &lt;strong&gt;Wiseone&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Explains difficult terms, suggests deeper reading, and simplifies complex pages.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI Power:&lt;/strong&gt; GPT-based&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Best For:&lt;/strong&gt; Learning new concepts while browsing&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://www.wiseone.io/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🖥️ 8. &lt;strong&gt;Octocom&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Integrates ChatGPT directly into GitHub.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI Power:&lt;/strong&gt; GPT&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Best For:&lt;/strong&gt; Understanding pull requests, writing better commit messages&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://chrome.google.com/webstore/detail/octocom/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🧩 9. &lt;strong&gt;ChatGPT for Google&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Adds ChatGPT responses alongside Google search results.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI Power:&lt;/strong&gt; GPT&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Best For:&lt;/strong&gt; Comparing code search results with AI suggestions&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://chatgpt-for-google.com/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  📚 10. &lt;strong&gt;Merlin&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Lets you use ChatGPT anywhere on the web (Google, Gmail, docs).&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI Power:&lt;/strong&gt; ChatGPT&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Best For:&lt;/strong&gt; Web-wide AI assistant for dev tasks and explanations&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://www.getmerlin.in/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔚 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;With AI tools now available at your fingertips in the browser, there's no excuse to work harder instead of smarter. Try a few of these extensions and watch your productivity skyrocket.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Let’s Connect and Build Together!
&lt;/h2&gt;

&lt;p&gt;Thanks for making it to the end! I’m passionate about web development, open source, and building tools that make life easier for developers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💻 Check out my projects on &lt;a href="https://github.com/Mo-Ibra" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐦 Follow me on &lt;a href="https://x.com/MoIbrraa" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for tips, threads, and dev insights&lt;/li&gt;
&lt;li&gt;🌐 Visit my &lt;a href="https://moibra.vercel.app/" rel="noopener noreferrer"&gt;Portfolio&lt;/a&gt; to learn more about what I do&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you're looking to &lt;strong&gt;collaborate&lt;/strong&gt;, &lt;strong&gt;hire&lt;/strong&gt;, or just &lt;strong&gt;chat about code&lt;/strong&gt;, my DMs are always open. 🙌&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🚀 50 Must-Try Websites for Web Developers</title>
      <dc:creator>Mohamed Ibrahim</dc:creator>
      <pubDate>Mon, 24 Mar 2025 04:26:04 +0000</pubDate>
      <link>https://dev.to/moibra/50-must-try-websites-for-web-developers-5cmo</link>
      <guid>https://dev.to/moibra/50-must-try-websites-for-web-developers-5cmo</guid>
      <description>&lt;p&gt;Web development is constantly evolving, and staying updated with the best tools and resources is essential. Whether you’re looking for learning platforms, design inspiration, or debugging tools, this list of 50 must-try websites will help you enhance your development workflow.  &lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 &lt;strong&gt;Learning &amp;amp; Documentation&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developer.mozilla.org/" rel="noopener noreferrer"&gt;MDN Web Docs&lt;/a&gt;&lt;/strong&gt; – The ultimate resource for HTML, CSS, and JavaScript documentation.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/" rel="noopener noreferrer"&gt;W3Schools&lt;/a&gt;&lt;/strong&gt; – Beginner-friendly tutorials with interactive coding exercises.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.freecodecamp.org/" rel="noopener noreferrer"&gt;FreeCodeCamp&lt;/a&gt;&lt;/strong&gt; – A free platform offering full web development courses.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devdocs.io/" rel="noopener noreferrer"&gt;DevDocs&lt;/a&gt;&lt;/strong&gt; – Fast and offline-accessible API documentation for various technologies.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.smashingmagazine.com/" rel="noopener noreferrer"&gt;Smashing Magazine&lt;/a&gt;&lt;/strong&gt; – Articles and tutorials on web design and development.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://css-tricks.com/" rel="noopener noreferrer"&gt;CSS-Tricks&lt;/a&gt;&lt;/strong&gt; – The best resource for mastering CSS techniques.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://web.dev/" rel="noopener noreferrer"&gt;Web.dev&lt;/a&gt;&lt;/strong&gt; – Google’s resource for best web performance, accessibility, and PWA techniques.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.frontendmentor.io/" rel="noopener noreferrer"&gt;Frontend Mentor&lt;/a&gt;&lt;/strong&gt; – Real-world coding challenges to improve front-end skills.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.theodinproject.com/" rel="noopener noreferrer"&gt;The Odin Project&lt;/a&gt;&lt;/strong&gt; – A full-stack curriculum to become a self-taught developer.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://javascript.info/" rel="noopener noreferrer"&gt;JavaScript.info&lt;/a&gt;&lt;/strong&gt; – A deep-dive guide to JavaScript fundamentals and advanced concepts.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🎨 &lt;strong&gt;Design &amp;amp; UI/UX Inspiration&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.awwwards.com/" rel="noopener noreferrer"&gt;Awwwards&lt;/a&gt;&lt;/strong&gt; – Showcases beautifully designed websites for inspiration.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://dribbble.com/" rel="noopener noreferrer"&gt;Dribbble&lt;/a&gt;&lt;/strong&gt; – A platform where designers share UI/UX concepts.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.behance.net/" rel="noopener noreferrer"&gt;Behance&lt;/a&gt;&lt;/strong&gt; – A community showcasing web and graphic design work.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.lapa.ninja/" rel="noopener noreferrer"&gt;Lapa Ninja&lt;/a&gt;&lt;/strong&gt; – A collection of stunning landing page designs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://mobbin.design/" rel="noopener noreferrer"&gt;Mobbin&lt;/a&gt;&lt;/strong&gt; – Mobile app design inspiration from top apps.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🔥 &lt;strong&gt;Front-End Development Tools&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://codepen.io/" rel="noopener noreferrer"&gt;CodePen&lt;/a&gt;&lt;/strong&gt; – An online sandbox for front-end experimentation.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://jsfiddle.net/" rel="noopener noreferrer"&gt;JSFiddle&lt;/a&gt;&lt;/strong&gt; – A playground for testing JavaScript, HTML, and CSS snippets.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://ui.shadcn.com/" rel="noopener noreferrer"&gt;Shadcn UI&lt;/a&gt;&lt;/strong&gt; – A component library built for modern UI development.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://ui.aceternity.com/" rel="noopener noreferrer"&gt;Aceternity UI&lt;/a&gt;&lt;/strong&gt; – Animated UI components for web projects.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://uiverse.io/" rel="noopener noreferrer"&gt;Uiverse&lt;/a&gt;&lt;/strong&gt; – Open-source UI elements for quick prototyping.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🚀 &lt;strong&gt;Performance &amp;amp; Optimization&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://pagespeed.web.dev/" rel="noopener noreferrer"&gt;PageSpeed Insights&lt;/a&gt;&lt;/strong&gt; – Google’s tool for analyzing and improving web performance.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developer.chrome.com/docs/lighthouse/overview/" rel="noopener noreferrer"&gt;Lighthouse&lt;/a&gt;&lt;/strong&gt; – Audits your site’s speed, accessibility, and SEO.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://gtmetrix.com/" rel="noopener noreferrer"&gt;GTmetrix&lt;/a&gt;&lt;/strong&gt; – Provides detailed web performance analysis.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tinypng.com/" rel="noopener noreferrer"&gt;TinyPNG&lt;/a&gt;&lt;/strong&gt; – Compresses PNG and JPG images without losing quality.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://squoosh.app/" rel="noopener noreferrer"&gt;Squoosh&lt;/a&gt;&lt;/strong&gt; – A powerful image optimization tool from Google.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🛠 &lt;strong&gt;Back-End &amp;amp; API Development&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.postman.com/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt;&lt;/strong&gt; – The best tool for testing and building APIs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://rapidapi.com/" rel="noopener noreferrer"&gt;RapidAPI&lt;/a&gt;&lt;/strong&gt; – A hub for discovering and connecting to APIs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.mockapi.io/" rel="noopener noreferrer"&gt;MockAPI&lt;/a&gt;&lt;/strong&gt; – Easily generate fake APIs for development and testing.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://jsonplaceholder.typicode.com/" rel="noopener noreferrer"&gt;JSONPlaceholder&lt;/a&gt;&lt;/strong&gt; – A free online REST API for testing.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://reqres.in/" rel="noopener noreferrer"&gt;ReqRes&lt;/a&gt;&lt;/strong&gt; – Another free API for simulating REST responses.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🔍 &lt;strong&gt;Debugging &amp;amp; Testing Tools&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://regex101.com/" rel="noopener noreferrer"&gt;Regex101&lt;/a&gt;&lt;/strong&gt; – A regex tester and debugger.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://caniuse.com/" rel="noopener noreferrer"&gt;Can I Use&lt;/a&gt;&lt;/strong&gt; – Check browser support for HTML, CSS, and JavaScript features.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developer.chrome.com/docs/devtools/" rel="noopener noreferrer"&gt;Google DevTools&lt;/a&gt;&lt;/strong&gt; – A built-in tool for debugging web applications.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://responsively.app/" rel="noopener noreferrer"&gt;Responsively App&lt;/a&gt;&lt;/strong&gt; – A browser for testing responsive web designs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://wave.webaim.org/" rel="noopener noreferrer"&gt;Wave&lt;/a&gt;&lt;/strong&gt; – An accessibility testing tool for websites.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  📦 &lt;strong&gt;Icons, Fonts, and UI Components&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://fonts.google.com/" rel="noopener noreferrer"&gt;Google Fonts&lt;/a&gt;&lt;/strong&gt; – A vast collection of free fonts for web development.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://fontawesome.com/" rel="noopener noreferrer"&gt;Font Awesome&lt;/a&gt;&lt;/strong&gt; – A massive library of icons for web projects.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://heroicons.com/" rel="noopener noreferrer"&gt;Heroicons&lt;/a&gt;&lt;/strong&gt; – Beautiful SVG icons for your UI components.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://lordicon.com/" rel="noopener noreferrer"&gt;Lordicon&lt;/a&gt;&lt;/strong&gt; – Animated icons to enhance UX.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.flaticon.com/" rel="noopener noreferrer"&gt;Flaticon&lt;/a&gt;&lt;/strong&gt; – Thousands of free and premium icons.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🧑‍💻 &lt;strong&gt;Code Collaboration &amp;amp; Productivity&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/strong&gt; – The most popular platform for version control and collaboration.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://about.gitlab.com/" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt;&lt;/strong&gt; – A DevOps platform with integrated CI/CD.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://bitbucket.org/" rel="noopener noreferrer"&gt;Bitbucket&lt;/a&gt;&lt;/strong&gt; – Another Git-based repository hosting service.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://codesandbox.io/" rel="noopener noreferrer"&gt;CodeSandbox&lt;/a&gt;&lt;/strong&gt; – Online collaborative IDE for front-end projects.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://replit.com/" rel="noopener noreferrer"&gt;Replit&lt;/a&gt;&lt;/strong&gt; – A cloud-based IDE supporting multiple programming languages.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  📱 &lt;strong&gt;Prototyping &amp;amp; Wireframing&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.figma.com/" rel="noopener noreferrer"&gt;Figma&lt;/a&gt;&lt;/strong&gt; – A powerful tool for designing and prototyping UI.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.adobe.com/products/xd.html/" rel="noopener noreferrer"&gt;Adobe XD&lt;/a&gt;&lt;/strong&gt; – A great alternative for wireframing and prototyping.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://balsamiq.com/" rel="noopener noreferrer"&gt;Balsamiq&lt;/a&gt;&lt;/strong&gt; – A simple wireframing tool for mockups.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://penpot.app/" rel="noopener noreferrer"&gt;Penpot&lt;/a&gt;&lt;/strong&gt; – A free and open-source design and prototyping tool.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://whimsical.com/" rel="noopener noreferrer"&gt;Whimsical&lt;/a&gt;&lt;/strong&gt; – A visual workspace for wireframing and brainstorming.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  🚀 &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;These 50 websites cover everything from learning resources and front-end tools to debugging utilities and collaboration platforms. Whether you're just starting or you're an experienced developer, these tools will help you work smarter and more efficiently.  &lt;/p&gt;




&lt;h3&gt;
  
  
  🔥 &lt;strong&gt;Follow Me&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Thank you for reading my blog. 🚀 You can follow me on &lt;a href="https://github.com/Mo-Ibra" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and connect on &lt;a href="https://x.com/MoIbrraa" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>15 Side Projects That Will Make You a Better Developer 🚀</title>
      <dc:creator>Mohamed Ibrahim</dc:creator>
      <pubDate>Tue, 18 Mar 2025 19:01:53 +0000</pubDate>
      <link>https://dev.to/moibra/15-side-projects-that-will-make-you-a-better-developer-16k8</link>
      <guid>https://dev.to/moibra/15-side-projects-that-will-make-you-a-better-developer-16k8</guid>
      <description>&lt;p&gt;Side projects are one of the best ways to level up your skills, build a portfolio, and explore new technologies. Whether you're a frontend, backend, or full-stack developer, these project ideas will challenge you and help you grow. Each project includes a skill breakdown, why it’s valuable, and ways to expand on it.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Beginner-Friendly Projects
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1️⃣ To-Do List App
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; JavaScript, React, Local Storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Learn state management, CRUD operations, and UI interactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Create a simple to-do list where users can add, edit, and delete tasks. Use local storage to persist data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Add authentication, real-time sync with Firebase, or a calendar feature.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2️⃣ Weather App
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; API calls, Async/Await, UI Design&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Get hands-on experience with API integration and error handling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Use OpenWeatherMap API to fetch weather data based on user input. Display temperature, humidity, and forecast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Use Next.js for SSR, add a map for location-based results, or implement AI for personalized weather insights.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3️⃣ Markdown Editor
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; React, Hooks, Local Storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Work with text inputs, parsing, and real-time preview.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Create a simple text editor that converts Markdown syntax into formatted output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Add file exports (PDF/HTML), cloud storage, or AI-powered text formatting.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4️⃣ URL Shortener
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; Express.js, Database (MySQL, PostgreSQL, or MongoDB)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Learn backend, database operations, and API development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Create an Express.js backend that takes a long URL and returns a short one, storing mappings in a database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Track analytics, add authentication, or generate QR codes for shortened URLs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5️⃣ Image Gallery with Search
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; React, Unsplash API, Tailwind CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Work with API calls, filtering, and UI layouts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Fetch images from Unsplash API and display them in a grid with a search bar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Add infinite scrolling, user uploads, or categories.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔥 Intermediate-Level Projects
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6️⃣ Notes App with Rich Text Editor
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; React, Draft.js/Quill.js, Local Storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Learn text formatting, state management, and component design.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Create a note-taking app that supports rich text formatting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Sync notes across devices, add voice-to-text, or AI summarization.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7️⃣ Expense Tracker
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; React, Redux, Firebase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Work with state management, database storage, and charts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Users can log their expenses and view reports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Add multi-user support, currency conversion, or AI-based budget tips.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8️⃣ AI-Powered Chatbot
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; OpenAI API, React, Node.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Understand API calls, AI models, and chatbot logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Implement an OpenAI-powered chatbot using React and Express.js.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Integrate with WhatsApp, Discord, or Slack.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9️⃣ E-Commerce Product Page
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; React, Tailwind CSS, Payment Integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Learn UI design, state management, and API integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Design a product display page with a shopping cart.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Add full checkout flow using Stripe or PayPal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔟 Real-Time Chat App
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; WebSockets, Firebase, React, Express.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Learn real-time communication and database updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Create a chat app where users can send and receive messages instantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Add authentication, end-to-end encryption, or AI moderation.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💎 Advanced-Level Projects
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1️⃣1️⃣ Job Board Website
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; Next.js, PostgreSQL, API Development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Build a full-stack project with dynamic data fetching.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Fetch job postings from a database or API and allow users to filter jobs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Scrape job listings from LinkedIn, Indeed, or Wuzzuf.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1️⃣2️⃣ YouTube Video Downloader
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; Next.js, Puppeteer, Express.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Learn web scraping and video processing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Create an app where users enter a video URL and get a download link.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Allow downloading audio-only versions or full playlists.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1️⃣3️⃣ AI-Based Code Review Tool
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; OpenAI API, Next.js, Node.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Automate code reviews and best practices enforcement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Use OpenAI API to analyze code and provide suggestions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Integrate with GitHub to review pull requests automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1️⃣4️⃣ Multi-Tenant SaaS Dashboard
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; Next.js, PostgreSQL, Authentication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Learn about multi-tenant architecture and database scaling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Create a dashboard that serves multiple users with separate data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Implement billing, team management, and analytics.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1️⃣5️⃣ Portfolio Generator
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; React, Next.js, Tailwind CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Help developers generate and deploy their portfolios easily.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to Build:&lt;/strong&gt; Users can enter their details and generate a customizable portfolio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrade it:&lt;/strong&gt; Add drag-and-drop customization or AI-based content suggestions.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Side projects help you apply what you learn, build confidence, and make your portfolio stand out. Pick one from the list, build it, and share your progress! Which one will you try first? Let me know in the comments! 🎯&lt;/p&gt;




&lt;h2&gt;
  
  
  Follow Me
&lt;/h2&gt;

&lt;p&gt;Thank you for reading my blog. 🚀 You can follow me on &lt;a href="https://github.com/Mo-Ibra" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and connect on &lt;a href="https://x.com/MoIbrraa" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Creating a Reusable Component Library with Next.js &amp; Tailwind CSS 🚀</title>
      <dc:creator>Mohamed Ibrahim</dc:creator>
      <pubDate>Thu, 13 Mar 2025 12:16:51 +0000</pubDate>
      <link>https://dev.to/moibra/creating-a-reusable-component-library-with-nextjs-tailwind-css-43ea</link>
      <guid>https://dev.to/moibra/creating-a-reusable-component-library-with-nextjs-tailwind-css-43ea</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Building a reusable component library can significantly improve development efficiency, maintainability, and consistency across projects. In this guide, we’ll walk through setting up a reusable component library using &lt;strong&gt;Next.js&lt;/strong&gt; and &lt;strong&gt;Tailwind CSS&lt;/strong&gt;, ensuring it’s modular, customizable, and easy to integrate into various projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;1. Setting Up the Project&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Initialize a New Next.js Project&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;First, create a new Next.js project and install dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-next-app@latest next-component-library &lt;span class="nt"&gt;--typescript&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;next-component-library
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Install Tailwind CSS&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Set up Tailwind CSS by installing its dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; tailwindcss postcss autoprefixer
npx tailwindcss init &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure &lt;code&gt;tailwind.config.js&lt;/code&gt;:&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;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./src/**/*.{js,ts,jsx,tsx}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;extend&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="na"&gt;plugins&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;Add Tailwind to &lt;code&gt;globals.css&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;utilities&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;2. Structuring the Component Library&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Create a Components Directory&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Inside the &lt;code&gt;src/&lt;/code&gt; folder, create a &lt;code&gt;components/&lt;/code&gt; directory to organize reusable UI components.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Example: Button Component&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Create a &lt;code&gt;Button.tsx&lt;/code&gt; file inside &lt;code&gt;components/&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;clsx&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;clsx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ButtonProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;primary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;secondary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;danger&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&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;Button&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ButtonProps&lt;/span&gt;&lt;span class="o"&gt;&amp;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;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;primary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onClick&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="nx"&gt;buttonClasses&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;clsx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;px-4 py-2 rounded-md font-semibold transition&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bg-blue-500 text-white hover:bg-blue-600&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;primary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bg-gray-500 text-white hover:bg-gray-600&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;secondary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bg-red-500 text-white hover:bg-red-600&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;danger&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;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;buttonClasses&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;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;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;3. Making Components Reusable &amp;amp; Customizable&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Using Props for Customization&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Props allow us to make components flexible. The &lt;code&gt;Button&lt;/code&gt; component above supports different variants and actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Supporting Tailwind Overrides&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To allow additional styles, modify the component to accept class names:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ButtonProps&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;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;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;primary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;className&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="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;clsx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;buttonClasses&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;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;h2&gt;
  
  
  &lt;strong&gt;4. Creating More Components&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Example: Card Component&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;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;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;children&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="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"border rounded-lg p-4 shadow-md"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"font-semibold text-lg mb-2"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;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;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Example: Input Component&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;className&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;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;placeholder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;className&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="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;clsx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;px-3 py-2 border rounded-md w-full&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;/&amp;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;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;5. Exporting Components for Easy Import&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To make the library easier to use, create an &lt;code&gt;index.ts&lt;/code&gt; inside the &lt;code&gt;components/&lt;/code&gt; folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Card&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, importing components is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/components&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;6. Publishing as an NPM Package (Optional)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To share your component library, you can publish it as an npm package.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Prepare the Package&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Create a &lt;code&gt;package.json&lt;/code&gt; in the root directory.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;exports&lt;/code&gt; to enable modular imports.&lt;/li&gt;
&lt;li&gt;Ensure your components are inside a &lt;code&gt;src/&lt;/code&gt; folder.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Build the Package&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Add a &lt;code&gt;build&lt;/code&gt; script in &lt;code&gt;package.json&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tsc &amp;amp;&amp;amp; tailwindcss -o styles.css"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run the build command:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Publish to NPM&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm login
npm publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once published, it can be installed in other projects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;my-nextjs-ui-library
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By following this guide, you’ve built a reusable component library using Next.js and Tailwind CSS. This modular approach helps maintain design consistency across projects while keeping components highly customizable.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Next Steps:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Expand the library with more components like modals, dropdowns, and alerts.&lt;/li&gt;
&lt;li&gt;Add Storybook for component documentation.&lt;/li&gt;
&lt;li&gt;Implement Tailwind’s &lt;code&gt;@apply&lt;/code&gt; for reusable utility styles.&lt;/li&gt;
&lt;li&gt;Optimize the package for tree shaking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By making your components reusable and shareable, you enhance efficiency in Next.js projects while maintaining a beautiful and consistent UI. 🚀&lt;/p&gt;




&lt;h3&gt;
  
  
  Follow Me
&lt;/h3&gt;

&lt;p&gt;Thank you for reading my blog. 🚀 You can follow me on &lt;a href="https://github.com/Mo-Ibra" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and connect on &lt;a href="https://x.com/MoIbrraa" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Best Practices for Structuring an Express.js Project</title>
      <dc:creator>Mohamed Ibrahim</dc:creator>
      <pubDate>Thu, 27 Feb 2025 08:39:45 +0000</pubDate>
      <link>https://dev.to/moibra/best-practices-for-structuring-an-expressjs-project-148i</link>
      <guid>https://dev.to/moibra/best-practices-for-structuring-an-expressjs-project-148i</guid>
      <description>&lt;p&gt;&lt;em&gt;How to organize your Express.js application for scalability and maintainability&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;📝 Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Express.js is a minimalist and flexible Node.js framework, but as your project grows, a well-structured codebase becomes crucial for maintainability. In this guide, we'll cover the &lt;strong&gt;best practices&lt;/strong&gt; for structuring an Express.js project for clarity, scalability, and maintainability.  &lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;📂 Recommended Folder Structure&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A clean structure keeps your project modular and scalable. Here's a commonly used &lt;strong&gt;Express.js project structure:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;📁 my-express-app  
 ├── 📁 src  
 │   ├── 📁 config          # Configuration files (e.g., database, environment variables)  
 │   ├── 📁 controllers     # Business logic (handles requests/responses)  
 │   ├── 📁 models          # Database models &amp;amp; schemas  
 │   ├── 📁 routes          # API route definitions  
 │   ├── 📁 middlewares     # Custom middleware (authentication, logging, error handling)  
 │   ├── 📁 services        # Business logic or external API interactions  
 │   ├── 📁 utils           # Helper functions and utilities  
 │   ├── app.js            # Express app setup  
 │   └── server.js         # Server initialization  
 ├── .env                  # Environment variables  
 ├── .gitignore            # Files to ignore in version control  
 ├── package.json          # Dependencies and scripts  
 ├── README.md             # Project documentation  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;1️⃣ Separate Concerns: Use MVC Pattern&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Model-View-Controller (MVC)&lt;/strong&gt; pattern helps organize code into logical layers:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Models&lt;/strong&gt; → Handle database interactions
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controllers&lt;/strong&gt; → Contain business logic (handling requests and responses)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routes&lt;/strong&gt; → Define API endpoints
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&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="c1"&gt;// src/routes/userRoutes.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&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;getUsers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;createUser&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../controllers/userController&lt;/span&gt;&lt;span class="dl"&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;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;getUsers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;router&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;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;createUser&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/controllers/userController.js&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="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../models/User&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getUsers&lt;/span&gt; &lt;span class="o"&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="nx"&gt;users&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;find&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="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createUser&lt;/span&gt; &lt;span class="o"&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="nx"&gt;newUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;User&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;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;newUser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&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="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&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="nx"&gt;newUser&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;h2&gt;
  
  
  &lt;strong&gt;2️⃣ Use Environment Variables (&lt;code&gt;.env&lt;/code&gt; file)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Never hardcode sensitive information like API keys, database credentials, or JWT secrets. Instead, store them in a &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt; file&lt;/strong&gt; and load them using &lt;code&gt;dotenv&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example &lt;code&gt;.env&lt;/code&gt; file:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PORT=5000
MONGO_URI=mongodb://localhost:27017/mydb
JWT_SECRET=mysecretkey
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Usage in &lt;code&gt;config.js&lt;/code&gt;:&lt;/strong&gt;&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="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dotenv&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;mongoURI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MONGO_URI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;jwtSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;JWT_SECRET&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;3️⃣ Use Middleware for Code Reusability&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Middleware helps keep the main logic clean and reusable.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example: Logger Middleware&lt;/strong&gt;&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="c1"&gt;// src/middlewares/logger.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logger&lt;/span&gt; &lt;span class="o"&gt;=&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="nx"&gt;next&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&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;method&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &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;url&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Usage in &lt;code&gt;app.js&lt;/code&gt;:&lt;/strong&gt;&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;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&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;logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./middlewares/logger&lt;/span&gt;&lt;span class="dl"&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;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;4️⃣ Implement Proper Error Handling&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Centralized error handling prevents redundant error-handling code.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example: Custom Error Handler&lt;/strong&gt;&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="c1"&gt;// src/middlewares/errorHandler.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;errorHandler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&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="nx"&gt;next&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="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="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&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="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;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="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;errorHandler&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Usage in &lt;code&gt;app.js&lt;/code&gt;:&lt;/strong&gt;&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;const&lt;/span&gt; &lt;span class="nx"&gt;errorHandler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./middlewares/errorHandler&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;errorHandler&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;5️⃣ Use Services for Business Logic&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Keep business logic separate from controllers by using a &lt;strong&gt;services layer&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example: User Service&lt;/strong&gt;&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="c1"&gt;// src/services/userService.js&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="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../models/User&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAllUsers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &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="k"&gt;return&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;find&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;&lt;strong&gt;Controller Usage:&lt;/strong&gt;&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;const&lt;/span&gt; &lt;span class="nx"&gt;userService&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../services/userService&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getUsers&lt;/span&gt; &lt;span class="o"&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="nx"&gt;users&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;userService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAllUsers&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="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;users&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;h2&gt;
  
  
  &lt;strong&gt;6️⃣ Database Connection in a Separate File&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To keep the &lt;code&gt;app.js&lt;/code&gt; clean, manage the &lt;strong&gt;database connection separately&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example: Database Connection File&lt;/strong&gt;&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="c1"&gt;// src/config/db.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mongoose&lt;/span&gt;&lt;span class="dl"&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;mongoURI&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./config&lt;/span&gt;&lt;span class="dl"&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;connectDB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &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="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mongoURI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;useNewUrlParser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;useUnifiedTopology&lt;/span&gt;&lt;span class="p"&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MongoDB Connected&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;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&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="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;connectDB&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Usage in &lt;code&gt;server.js&lt;/code&gt;:&lt;/strong&gt;&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;const&lt;/span&gt; &lt;span class="nx"&gt;connectDB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./config/db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;connectDB&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;🚀 Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By structuring your &lt;strong&gt;Express.js&lt;/strong&gt; project properly, you create a &lt;strong&gt;scalable, maintainable, and organized&lt;/strong&gt; codebase that grows with your application. Following these best practices ensures your project is easy to debug, extend, and collaborate on.  &lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;What structure do you use for your Express.js projects? Let me know in the comments!&lt;/strong&gt; 🚀  &lt;/p&gt;

&lt;p&gt;📢 &lt;strong&gt;If you found this guide helpful, share it with fellow developers and follow me for more web development tips! You can follow me on &lt;a href="https://github.com/Mo-Ibra" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and connect on &lt;a href="https://x.com/MoIbrraa" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>What Technologies Do You Use Every Day? Let's Discuss! 🤝</title>
      <dc:creator>Mohamed Ibrahim</dc:creator>
      <pubDate>Wed, 12 Feb 2025 16:18:58 +0000</pubDate>
      <link>https://dev.to/moibra/what-technologies-do-you-use-every-day-lets-discuss-5cco</link>
      <guid>https://dev.to/moibra/what-technologies-do-you-use-every-day-lets-discuss-5cco</guid>
      <description>&lt;p&gt;As developers, we rely on various technologies, frameworks, and tools to streamline our workflow and enhance productivity. Recently, I started a discussion with my friends about the technologies we use daily, including for development, deployment, API integration, and even coding assistance.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Here’s a look at my daily tech stack:&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🌐 Frontend Technologies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;React: My go-to JavaScript library for building UI components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next.js: The framework I use for server-side rendering (SSR), static site generation (SSG), and full-stack capabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TailwindCSS: A utility-first CSS framework that helps me style my applications efficiently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;shadcn/ui: A great component library that works seamlessly with TailwindCSS.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🖥️ Backend Technologies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Clerk: For authentication and user management.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Supabase: A backend-as-a-service platform providing authentication, database, and API services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Node.js: My choice for backend development due to its speed and efficiency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Express.js: A minimal and flexible framework for handling server-side logic and APIs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PostgreSQL: A powerful and reliable relational database for storing and managing data.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ⚙️ Tools &amp;amp; Extensions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;ChatGPT: For brainstorming, debugging, and generating code snippets.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub Copilot: AI-powered code suggestions that speed up my development process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Codium: Another great AI-assisted coding tool to improve efficiency and reduce repetitive tasks.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🚀 Deployment &amp;amp; APIs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For API management, I often use Express.js and RESTful principles, along with authentication techniques like JWT.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I deploy my applications using platforms like Vercel (especially for Next.js projects) and Render for backend services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Supabase also helps me manage authentication, database, and API functionalities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For API management, I often use Express.js and RESTful principles, along with authentication techniques like JWT.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I deploy my applications using platforms like Vercel (especially for &lt;br&gt;
Next.js projects) and Render for backend services.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  💬 Now It’s Your Turn!
&lt;/h3&gt;

&lt;p&gt;I’d love to hear from you! What technologies, tools, or frameworks do you use daily? Are there any hidden gems that have boosted your productivity? Let’s exchange insights in the comments! 🚀&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Best VS Code Extensions to Boost Your Productivity 🚀</title>
      <dc:creator>Mohamed Ibrahim</dc:creator>
      <pubDate>Sun, 09 Feb 2025 17:03:02 +0000</pubDate>
      <link>https://dev.to/moibra/best-vs-code-extensions-to-boost-your-productivity-1n86</link>
      <guid>https://dev.to/moibra/best-vs-code-extensions-to-boost-your-productivity-1n86</guid>
      <description>&lt;p&gt;Visual Studio Code offers a robust ecosystem of extensions that can significantly boost your productivity. Here are 20 must-have VS Code extensions:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;strong&gt;Prettier – Code Formatter&lt;/strong&gt; ✨
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Automatically formats your code for a consistent style.&lt;/li&gt;
&lt;li&gt;Supports multiple languages including JavaScript, TypeScript, HTML, and CSS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. &lt;strong&gt;ESLint&lt;/strong&gt; 🔍
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Detects and fixes common code errors.&lt;/li&gt;
&lt;li&gt;Enforces coding standards across your projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. &lt;strong&gt;Live Server&lt;/strong&gt; 🌐
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Provides real-time reloading for HTML, CSS, and JavaScript files.&lt;/li&gt;
&lt;li&gt;Enables instant browser previews for quicker development.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. &lt;strong&gt;GitLens&lt;/strong&gt; 🔥
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Enhances Git integration in VS Code.&lt;/li&gt;
&lt;li&gt;Shows detailed commit histories and code annotations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. &lt;strong&gt;Native Bracket Pair Colorization&lt;/strong&gt; 🎨
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Built into VS Code since version 1.60.&lt;/li&gt;
&lt;li&gt;Enable it by setting &lt;code&gt;"editor.bracketPairColorization.enabled": true&lt;/code&gt; in your settings.&lt;/li&gt;
&lt;li&gt;Offers similar functionality to the old Bracket Pair Colorizer extension with improved integration and performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. &lt;strong&gt;Auto Rename Tag&lt;/strong&gt; 🔄
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Automatically renames paired HTML, JSX, or XML tags.&lt;/li&gt;
&lt;li&gt;Saves time and reduces syntax errors during editing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. &lt;strong&gt;Path Intellisense&lt;/strong&gt; 📁
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Provides autocompletion for file paths in your code.&lt;/li&gt;
&lt;li&gt;Speeds up the process of importing modules and assets.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. &lt;strong&gt;Thunder Client&lt;/strong&gt; 🚀
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A lightweight REST API client built into VS Code.&lt;/li&gt;
&lt;li&gt;Facilitates quick API testing without leaving the editor.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  9. &lt;strong&gt;REST Client&lt;/strong&gt; ⚡
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Allows you to send HTTP requests directly from VS Code.&lt;/li&gt;
&lt;li&gt;Supports environment variables and request history.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  10. &lt;strong&gt;Material Icon Theme&lt;/strong&gt; 🎨
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Enhances file navigation with visually appealing icons.&lt;/li&gt;
&lt;li&gt;Makes it easier to identify file types at a glance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  11. &lt;strong&gt;Tailwind CSS IntelliSense&lt;/strong&gt; 🔥
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Provides advanced autocompletion and tooltips for Tailwind CSS.&lt;/li&gt;
&lt;li&gt;Enhances productivity when working with Tailwind CSS projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  12. &lt;strong&gt;Docker&lt;/strong&gt; 🐳
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Integrates Docker functionalities within VS Code.&lt;/li&gt;
&lt;li&gt;Manage containers and images without leaving the editor.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  13. &lt;strong&gt;Remote - SSH&lt;/strong&gt; 🔌
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Enables remote development on SSH servers.&lt;/li&gt;
&lt;li&gt;Seamlessly work on remote projects as if they were local.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  14. &lt;strong&gt;Code Runner&lt;/strong&gt; ⚡
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Allows you to run code snippets for various languages quickly.&lt;/li&gt;
&lt;li&gt;Supports multiple languages and improves rapid prototyping.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  15. &lt;strong&gt;Settings Sync&lt;/strong&gt; 🔄
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Synchronizes your VS Code settings across different devices.&lt;/li&gt;
&lt;li&gt;Easily maintain your configuration wherever you work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  16. &lt;strong&gt;Debugger for Chrome&lt;/strong&gt; 🐞
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Facilitates debugging JavaScript code directly in Chrome.&lt;/li&gt;
&lt;li&gt;Simplifies the debugging process for front-end projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  17. &lt;strong&gt;Live Share&lt;/strong&gt; 🤝
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Enables real-time collaboration with other developers.&lt;/li&gt;
&lt;li&gt;Share your coding session with peers for pair programming.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  18. &lt;strong&gt;Rainbow CSV&lt;/strong&gt; 🌈
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Colorizes CSV files for easier reading and editing.&lt;/li&gt;
&lt;li&gt;Enhances visibility of data in comma-separated values.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  19. &lt;strong&gt;Markdown All in One&lt;/strong&gt; 📝
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Provides a comprehensive set of Markdown editing tools.&lt;/li&gt;
&lt;li&gt;Includes shortcuts, previews, and enhanced syntax support.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  20. &lt;strong&gt;npm Intellisense&lt;/strong&gt; 📦
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Offers autocompletion for npm modules in your import statements.&lt;/li&gt;
&lt;li&gt;Simplifies the process of managing package dependencies.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Enhance your VS Code experience with these extensions and watch your productivity soar! 💥&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Let’s Connect and Build Together!
&lt;/h2&gt;

&lt;p&gt;Thanks for making it to the end! I’m passionate about web development, open source, and building tools that make life easier for developers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💻 Check out my projects on &lt;a href="https://github.com/Mo-Ibra" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐦 Follow me on &lt;a href="https://x.com/MoIbrraa" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for tips, threads, and dev insights&lt;/li&gt;
&lt;li&gt;🌐 Visit my &lt;a href="https://moibra.vercel.app/" rel="noopener noreferrer"&gt;Portfolio&lt;/a&gt; to learn more about what I do&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you're looking to &lt;strong&gt;collaborate&lt;/strong&gt;, &lt;strong&gt;hire&lt;/strong&gt;, or just &lt;strong&gt;chat about code&lt;/strong&gt;, my DMs are always open. 🙌&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
