<?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: Rehman Khan</title>
    <description>The latest articles on DEV Community by Rehman Khan (@slacky300).</description>
    <link>https://dev.to/slacky300</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%2F1974606%2F15abb823-046a-4180-9446-30409a850c73.jpeg</url>
      <title>DEV Community: Rehman Khan</title>
      <link>https://dev.to/slacky300</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/slacky300"/>
    <language>en</language>
    <item>
      <title>StreamVault: Solving the AWS S3 Bulk Download Problem Once and For All</title>
      <dc:creator>Rehman Khan</dc:creator>
      <pubDate>Sat, 03 May 2025 14:48:28 +0000</pubDate>
      <link>https://dev.to/slacky300/streamvault-solving-the-aws-s3-bulk-download-problem-once-and-for-all-4o0m</link>
      <guid>https://dev.to/slacky300/streamvault-solving-the-aws-s3-bulk-download-problem-once-and-for-all-4o0m</guid>
      <description>&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%2Fbuild007-images.s3.ap-south-1.amazonaws.com%2Fassets%2FStreamVault.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%2Fbuild007-images.s3.ap-south-1.amazonaws.com%2Fassets%2FStreamVault.png" alt="StreamVault Banner Image" width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🌊 StreamVault: S3 Bulk Downloads Reimagined 🚀
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;When AWS S3’s limitations meet large-scale data needs, a new solution emerges&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 The Problem No One Talks About
&lt;/h2&gt;

&lt;p&gt;Every AWS developer has been there: you need to download an entire S3 folder structure containing thousands of files, and suddenly you're faced with a frustrating reality—AWS doesn't provide a simple way to do this at scale.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;👆 Click through the AWS Console manually (impossible for large folders)&lt;/li&gt;
&lt;li&gt;🖥️ Learn and configure the AWS CLI (with its own quirks and limitations)&lt;/li&gt;
&lt;li&gt;🔨 Build a custom solution (which inevitably becomes a project in itself)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This challenge becomes particularly acute when dealing with data archives containing tens of thousands of files or datasets measuring in the tens or hundreds of gigabytes. Many organizations resort to inefficient workarounds or accept the operational bottleneck.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎉 Introducing StreamVault
&lt;/h2&gt;

&lt;p&gt;StreamVault is a high-performance S3 bulk downloader that elegantly solves this problem through a microservices architecture designed specifically for mass S3 asset retrieval. Unlike other approaches, StreamVault:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📊 &lt;strong&gt;Maintains constant memory usage&lt;/strong&gt; regardless of download size (tested with archives up to 50GB)&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;Handles massive file counts&lt;/strong&gt; (25,000+ files in a single download)&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Creates archives on-the-fly&lt;/strong&gt; without requiring local storage&lt;/li&gt;
&lt;li&gt;⚖️ &lt;strong&gt;Implements intelligent job queuing&lt;/strong&gt; to balance system resources&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;Delivers completed archives&lt;/strong&gt; directly to your specified S3 location&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a system that can handle large-scale download operations on modest hardware—even a t2.large instance.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ How It Actually Works
&lt;/h2&gt;

&lt;p&gt;Let's peek under the hood. StreamVault's architecture looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────┐     ┌─────────────┐      ┌──────────────┐
│  API Server │────▶ |Redis Queue │◀───▶│ Worker Nodes │
└─────────────┘      └─────────────┘     └──────────────┘
       │                                       │
       ▼                                       ▼
┌─────────────┐                         ┌──────────────┐
│ Monitoring  │                         │ AWS S3       │
│ Dashboard   │                         │ Service      │
└─────────────┘                         └──────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you request a download:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔍 The API validates your request and classifies the job by size&lt;/li&gt;
&lt;li&gt;🔄 A worker node picks up the job and begins streaming files from S3&lt;/li&gt;
&lt;li&gt;🗜️ Files are compressed on-the-fly into a ZIP archive&lt;/li&gt;
&lt;li&gt;⬆️ The completed archive is uploaded directly to your S3 bucket&lt;/li&gt;
&lt;li&gt;🔗 You receive a download link (pre-signed URL or direct path)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The real magic happens in the streaming architecture. Instead of downloading all files locally before creating the archive (a common approach that breaks at scale), StreamVault implements a pipeline that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📥 Reads chunks from S3&lt;/li&gt;
&lt;li&gt;🔄 Passes them through the compression algorithm&lt;/li&gt;
&lt;li&gt;📤 Writes the compressed output to the archive&lt;/li&gt;
&lt;li&gt;✨ All without ever storing the complete file in memory&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📊 Real-World Performance
&lt;/h2&gt;

&lt;p&gt;Here's what StreamVault achieved in our benchmark testing:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Files&lt;/th&gt;
&lt;th&gt;Total Size&lt;/th&gt;
&lt;th&gt;Processing Time&lt;/th&gt;
&lt;th&gt;Peak Memory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🟢 Small Archive&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;500MB&lt;/td&gt;
&lt;td&gt;45s&lt;/td&gt;
&lt;td&gt;220MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🟡 Medium Archive&lt;/td&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;td&gt;5GB&lt;/td&gt;
&lt;td&gt;8m 20s&lt;/td&gt;
&lt;td&gt;340MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔴 Large Archive&lt;/td&gt;
&lt;td&gt;25,000&lt;/td&gt;
&lt;td&gt;50GB&lt;/td&gt;
&lt;td&gt;1h 45m&lt;/td&gt;
&lt;td&gt;480MB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Most impressive&lt;/strong&gt;: Even with a 50GB archive containing 25,000 files, memory usage barely increased compared to small archives. This demonstrates the system's efficiency and scalability.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Why We Built It
&lt;/h2&gt;

&lt;p&gt;As cloud-native architectures become the norm, organizations increasingly store critical assets in S3. However, the inability to efficiently retrieve large asset collections creates operational friction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👩‍💻 &lt;strong&gt;Development teams&lt;/strong&gt; need to pull down entire project assets&lt;/li&gt;
&lt;li&gt;🧪 &lt;strong&gt;Data scientists&lt;/strong&gt; require bulk dataset downloads&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Content managers&lt;/strong&gt; must archive media libraries&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Compliance officers&lt;/strong&gt; need to collect documents for audits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While AWS provides excellent scalability for storing assets, the retrieval side has remained challenging—until now.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Getting Started in 5 Minutes
&lt;/h2&gt;

&lt;p&gt;The quickest way to try StreamVault is with Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the repository&lt;/span&gt;
git clone https://github.com/Slacky300/StreamVault.git
&lt;span class="nb"&gt;cd &lt;/span&gt;StreamVault

&lt;span class="c"&gt;# Configure environment variables&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="c"&gt;# Edit .env with your AWS credentials and settings&lt;/span&gt;

&lt;span class="c"&gt;# Deploy with Docker Compose&lt;/span&gt;
docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once running, you can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🌐 Access the API at &lt;code&gt;http://localhost:3000&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;📊 Monitor jobs at &lt;code&gt;http://localhost:3001/dashboard&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🔄 Submit a download job with a simple API call:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:3000/create-job &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"s3Key": "path/to/s3/folder"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔋 Beyond Basic Downloads
&lt;/h2&gt;

&lt;p&gt;StreamVault isn't just for simple downloads. Its architecture supports advanced use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔄 &lt;strong&gt;Intelligent job caching&lt;/strong&gt;: If multiple users request the same folder, StreamVault returns the existing archive instead of regenerating it&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;Configurable resource limits&lt;/strong&gt;: Control memory usage, concurrency, and CPU allocation&lt;/li&gt;
&lt;li&gt;🎯 &lt;strong&gt;Custom delivery options&lt;/strong&gt;: Flexible archive storage and access methods&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;Detailed monitoring&lt;/strong&gt;: Real-time visibility into job progress and system metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture is also designed for horizontal scaling. Need more throughput? Add worker nodes to process more jobs concurrently.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ The Technical Edge
&lt;/h2&gt;

&lt;p&gt;What sets StreamVault apart from other solutions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;💾 &lt;strong&gt;Memory efficiency&lt;/strong&gt;: Constant memory footprint regardless of download size&lt;/li&gt;
&lt;li&gt;🎯 &lt;strong&gt;Smart queue management&lt;/strong&gt;: Jobs are classified as large or small based on estimated size&lt;/li&gt;
&lt;li&gt;⚖️ &lt;strong&gt;Resource-aware processing&lt;/strong&gt;: Automatic throttling prevents memory exhaustion&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Resilient job handling&lt;/strong&gt;: Failed operations are automatically retried&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Performance monitoring&lt;/strong&gt;: Built-in dashboard for system visibility&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  👥 Real User Feedback
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Before StreamVault, our team spent hours manually downloading assets from S3. Now we just submit a job and receive the archive link when it's ready. It's saved us countless hours of engineering time." — &lt;em&gt;DevOps Engineer&lt;/em&gt; ⭐⭐⭐⭐⭐&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🔮 Looking Forward: The Roadmap
&lt;/h2&gt;

&lt;p&gt;StreamVault is actively developing new features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔍 Selective file filtering by patterns or metadata&lt;/li&gt;
&lt;li&gt;🔗 Multi-bucket aggregation into single archives&lt;/li&gt;
&lt;li&gt;🔒 Enhanced security features for enterprise environments&lt;/li&gt;
&lt;li&gt;📱 Custom notification webhooks for job completion&lt;/li&gt;
&lt;li&gt;⚡ Performance optimizations for ultra-large archives (500GB+)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤝 Join the Project
&lt;/h2&gt;

&lt;p&gt;StreamVault is open source and actively seeking contributors. Whether you're interested in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💻 Enhancing the core architecture&lt;/li&gt;
&lt;li&gt;📝 Improving documentation and examples&lt;/li&gt;
&lt;li&gt;🔌 Building additional integrations&lt;/li&gt;
&lt;li&gt;🐛 Reporting bugs or suggesting features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We welcome your involvement. Visit the &lt;a href="https://github.com/Slacky300/StreamVault" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  📌 The Bottom Line
&lt;/h2&gt;

&lt;p&gt;AWS S3 offers incredible storage capabilities, but bulk retrieval has remained a challenge. StreamVault fills this gap with an elegant, scalable solution that works with your existing AWS infrastructure.&lt;/p&gt;

&lt;p&gt;By implementing advanced streaming techniques and intelligent resource management, StreamVault transforms what was once a painful operational bottleneck into a simple API call that efficiently handles your bulk download needs.&lt;/p&gt;

&lt;p&gt;Try it today, and transform how your organization handles bulk S3 downloads! 🚀&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you encountered S3 download challenges in your organization? Share your experiences in the comments below. And if you found this article helpful, please clap and share with your network.&lt;/em&gt; 👏&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://github.com/Slacky300/StreamVault" rel="noopener noreferrer"&gt;StreamVault Project&lt;/a&gt; | &lt;a href="https://github.com/Slacky300/StreamVault/issues" rel="noopener noreferrer"&gt;Submit Issues&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>webdev</category>
      <category>node</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Revolutionize Your Conversations with Node Natter: An Open-Source Real-Time Chat App 🚀</title>
      <dc:creator>Rehman Khan</dc:creator>
      <pubDate>Tue, 15 Apr 2025 18:36:52 +0000</pubDate>
      <link>https://dev.to/slacky300/revolutionize-your-conversations-with-node-natter-an-open-source-real-time-chat-app-4j3l</link>
      <guid>https://dev.to/slacky300/revolutionize-your-conversations-with-node-natter-an-open-source-real-time-chat-app-4j3l</guid>
      <description>&lt;p&gt;In today’s hyper-connected world, seamless communication is the key to success, whether you're collaborating with a team, building a community, or simply catching up with friends. But what if your chat platform could do more than just connect you? What if it could also empower you to shape and improve it?&lt;/p&gt;

&lt;p&gt;Welcome to &lt;strong&gt;Node Natter&lt;/strong&gt;, the &lt;strong&gt;open-source real-time chat application&lt;/strong&gt; that puts the power in your hands. Built for developers, teams, and communities alike, Node Natter allows you to &lt;strong&gt;create, contribute, and connect&lt;/strong&gt; like never before.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Slacky300/NODE_NATTER" rel="noopener noreferrer"&gt;&lt;strong&gt;👉 Explore the GitHub Repository&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://node-natter.cargodeploy.me" rel="noopener noreferrer"&gt;&lt;strong&gt;🌐 Try Node Natter Live Now&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Node Natter?
&lt;/h2&gt;

&lt;p&gt;Node Natter is an &lt;strong&gt;open-source, real-time chat application&lt;/strong&gt; designed to foster dynamic conversations. It empowers users to create chat rooms, share ideas, and engage with their communities—all while giving developers the freedom to customize and enhance the platform to suit their needs.&lt;/p&gt;

&lt;p&gt;Whether you’re looking for a reliable chat app or an exciting open-source project to contribute to, Node Natter has something for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Node Natter is Your Next Favorite Chat App
&lt;/h2&gt;

&lt;p&gt;Here’s why Node Natter is turning heads in the world of chat applications:&lt;/p&gt;

&lt;h3&gt;
  
  
  🌍 &lt;strong&gt;Completely Open Source&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Node Natter is &lt;strong&gt;open to everyone&lt;/strong&gt;. Dive into the codebase, explore how it works, and contribute your own ideas. By joining the Node Natter community, you’re not just using the app—you’re helping to shape its future.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Slacky300/NODE_NATTER" rel="noopener noreferrer"&gt;&lt;strong&gt;👉 View the Source Code on GitHub&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 &lt;strong&gt;Real-Time Communication, Unleashed&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Built on the power of Node.js and WebSocket protocols, Node Natter delivers &lt;strong&gt;lightning-fast performance&lt;/strong&gt; for truly seamless conversations.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏠 &lt;strong&gt;Create Your Own Chat Rooms&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Easily set up chat rooms tailored to your needs. Whether it’s for brainstorming, event planning, or just hanging out with friends, Node Natter makes it simple.&lt;/p&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%2Fvteqpr460wxqakbs4vt0.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%2Fvteqpr460wxqakbs4vt0.png" alt="Node-Natter ChatRoomsPage" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📱 &lt;strong&gt;Cross-Platform Compatibility&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Chat from anywhere, on any device. Node Natter’s responsive design ensures a smooth experience across desktop, tablet, and mobile.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 &lt;strong&gt;Designed for Developers&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;With a &lt;strong&gt;98.6% JavaScript&lt;/strong&gt; codebase, Node Natter is an ideal project for developers of all levels. Whether you’re a beginner looking to hone your skills or an experienced coder seeking your next big challenge, Node Natter welcomes your contributions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Slacky300/NODE_NATTER" rel="noopener noreferrer"&gt;&lt;strong&gt;👨‍💻 Contribute to the Project on GitHub&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Power of Open Source
&lt;/h2&gt;

&lt;p&gt;Open source is more than just a buzzword—it’s a philosophy that fosters innovation, collaboration, and community. By making Node Natter open source, we’re inviting you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Learn:&lt;/strong&gt; Explore the inner workings of a real-time chat application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contribute:&lt;/strong&gt; Fix bugs, add features, or even propose entirely new ideas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaborate:&lt;/strong&gt; Work alongside a global community of passionate developers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our vision is to create a chat platform that evolves with its users. And with your help, we can make Node Natter better for everyone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Slacky300/NODE_NATTER" rel="noopener noreferrer"&gt;&lt;strong&gt;🌟 Star Node Natter on GitHub&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Involved Today!
&lt;/h2&gt;

&lt;p&gt;Ready to join the Node Natter community? Here’s how you can get started:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;⭐ &lt;strong&gt;Star the Repository&lt;/strong&gt;: Show your support by starring the &lt;a href="https://github.com/Slacky300/NODE_NATTER" rel="noopener noreferrer"&gt;Node Natter GitHub repo&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;👨‍💻 &lt;strong&gt;Contribute&lt;/strong&gt;: Check out the issues tab for ways to contribute, or start building a feature you’d love to see.&lt;/li&gt;
&lt;li&gt;📢 &lt;strong&gt;Spread the Word&lt;/strong&gt;: Share Node Natter with your friends, teams, and fellow developers.&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Try it Live&lt;/strong&gt;: Experience Node Natter in action on our &lt;a href="https://node-natter.cargodeploy.me" rel="noopener noreferrer"&gt;live platform&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Who Can Benefit from Node Natter?
&lt;/h2&gt;

&lt;p&gt;Node Natter is perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developers:&lt;/strong&gt; Dive into an open-source project and sharpen your coding skills.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small Teams:&lt;/strong&gt; Collaborate in real-time and make decisions faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community Leaders:&lt;/strong&gt; Build and manage vibrant online communities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Everyone Else:&lt;/strong&gt; Enjoy a fast, secure, and customizable chat experience.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Ready to Start Natting?
&lt;/h2&gt;

&lt;p&gt;Node Natter isn’t just another chat app—it’s a community-driven project that’s built by and for its users. Whether you’re here to chat or to contribute, we’re excited to have you on board.&lt;/p&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%2Fkohnjwt35m3wsf2fnkq0.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%2Fkohnjwt35m3wsf2fnkq0.png" alt="NodeNatter ChatRoomZone" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Slacky300/NODE_NATTER" rel="noopener noreferrer"&gt;&lt;strong&gt;👉 Visit the GitHub Repository&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://node-natter.cargodeploy.me" rel="noopener noreferrer"&gt;&lt;strong&gt;🌐 Try Node Natter Live Now&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Node Natter: Where Open Source Meets Real-Time Communication.&lt;/em&gt; ✨&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>node</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>Deploying Your MERN Stack Application on Render: A Step-by-Step Guide</title>
      <dc:creator>Rehman Khan</dc:creator>
      <pubDate>Sun, 25 Aug 2024 09:51:20 +0000</pubDate>
      <link>https://dev.to/slacky300/deploying-your-mern-stack-application-on-render-a-step-by-step-guide-23nk</link>
      <guid>https://dev.to/slacky300/deploying-your-mern-stack-application-on-render-a-step-by-step-guide-23nk</guid>
      <description>&lt;p&gt;Hello, Dev Community! 🙌&lt;/p&gt;

&lt;p&gt;Deploying a MERN (MongoDB, Express.js, React, Node.js) stack application can be challenging, especially when handling both the frontend and backend. In this guide, I’ll walk you through deploying a MERN stack application using Render, with a clear separation between the &lt;code&gt;client&lt;/code&gt; (React) and &lt;code&gt;server&lt;/code&gt; (Node.js/Express) directories.&lt;/p&gt;

&lt;p&gt;Let’s dive into the deployment process while also highlighting the importance of managing your &lt;code&gt;.gitignore&lt;/code&gt; and &lt;code&gt;.env&lt;/code&gt; files.&lt;/p&gt;

&lt;h2&gt;
  
  
  📁 Project Structure Overview
&lt;/h2&gt;

&lt;p&gt;Here’s how our project is structured:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project-root/
│
├── client/   # Contains React code
│   ├── public/
│   ├── src/
│   ├── package.json
│
├── server/   # Contains Node.js/Express.js code
│   ├── controllers/
│   ├── routes/
│   ├── utils/
│   ├── server.js
│   ├── package.json
│   ├── .env
│
├── .gitignore
└── README.md"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📦 Step 1: Prepare Your Application for Deployment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Configure &lt;code&gt;server/package.json&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;In your &lt;code&gt;server/package.json&lt;/code&gt;, add the following scripts to handle both the frontend and backend builds:&lt;br&gt;
&lt;/p&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;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node server.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"frontend-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;"cd ../client &amp;amp;&amp;amp; npm install &amp;amp;&amp;amp; npm run build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"backend-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;"npm install"&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;"npm run frontend-build &amp;amp;&amp;amp; npm run backend-build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s2"&gt;"nodemon server.js"&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;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;frontend-build&lt;/code&gt;&lt;/strong&gt;: Navigates to the &lt;code&gt;client&lt;/code&gt; directory, installs dependencies, and builds the React app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;backend-build&lt;/code&gt;&lt;/strong&gt;: Installs dependencies for the server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;build&lt;/code&gt;&lt;/strong&gt;: Runs both &lt;code&gt;frontend-build&lt;/code&gt; and &lt;code&gt;backend-build&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1.2 The Importance of the &lt;code&gt;.gitignore&lt;/code&gt; File
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;.gitignore&lt;/code&gt; file is crucial in any project as it ensures that sensitive or unnecessary files don’t get pushed to your Git repository. This typically includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node modules&lt;/strong&gt;: Large dependency files that should be installed via &lt;code&gt;npm install&lt;/code&gt; rather than stored in your repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build files&lt;/strong&gt;: You don't need to store generated files like &lt;code&gt;build/&lt;/code&gt; from React.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment files&lt;/strong&gt;: Keep sensitive credentials and keys out of your version control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s a basic example of what your &lt;code&gt;.gitignore&lt;/code&gt; file might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/node_modules
/client/build
/server/node_modules
/server/.env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.3 The Role of the &lt;code&gt;.env&lt;/code&gt; File
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;.env&lt;/code&gt; file is where you store environment variables, such as API keys, database URIs, and secret tokens. This file should never be committed to your Git repository for security reasons. Instead, it should be added to your &lt;code&gt;.gitignore&lt;/code&gt; file to ensure it remains local.&lt;/p&gt;

&lt;p&gt;Example &lt;code&gt;.env&lt;/code&gt; file for your server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MONGODB_URI=your_mongo_db_uri
JWT_SECRET=your_jwt_secret
PORT=8080
PASSWORD=your_app_password_for_email
EMAIL=your_gmail_email
BACKEND_URL=your_backend_url/api/v1
FRONTEND_URL=your_frontend_url
PRODUCTION=true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🌐 Step 2: Deploying to Render
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Push Your Code to GitHub
&lt;/h3&gt;

&lt;p&gt;First, ensure that your code is pushed to a GitHub repository. This will allow Render to pull your code during the deployment process.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1: Create a GitHub Repository
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and log in to your account.&lt;/li&gt;
&lt;li&gt;Click on the ‘+’ icon in the top right corner and select ‘New repository.’&lt;/li&gt;
&lt;li&gt;Give your repository a name, and optionally add a description.&lt;/li&gt;
&lt;li&gt;Choose the repository to be either public or private.&lt;/li&gt;
&lt;li&gt;Click ‘Create repository.’&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Step 2: Initialize Git in Your Project
&lt;/h4&gt;

&lt;p&gt;If you haven’t already initialized a Git repository in your project, do so by running the following command in your project root directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 3: Add Your Files to the Repository
&lt;/h4&gt;

&lt;p&gt;Add all your project files to the repository using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 4: Commit Your Changes
&lt;/h4&gt;

&lt;p&gt;Commit the added files with a descriptive commit message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s1"&gt;'Initial commit'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 5: Add the GitHub Repository as a Remote
&lt;/h4&gt;

&lt;p&gt;Link your local repository to the GitHub repository you just created:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    git remote add origin https://github.com/your-username/your-repository-name.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;your-username&lt;/code&gt; and &lt;code&gt;your-repository-name&lt;/code&gt; with your GitHub username and the name of your repository.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 6: Push Your Code to GitHub
&lt;/h4&gt;

&lt;p&gt;Finally, push your code to the GitHub repository using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git push &lt;span class="nt"&gt;--set-upstream&lt;/span&gt; origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will push your code to the &lt;code&gt;main&lt;/code&gt; branch of your GitHub repository.&lt;/p&gt;

&lt;p&gt;Now your code is hosted on GitHub, and you can proceed with the deployment on Render!&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Create a New Web Service on &lt;a href="https://render.com/" rel="noopener noreferrer"&gt;Render&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Log in to your Render account (or sign up if you don’t have one).&lt;/li&gt;
&lt;li&gt;Click on “New” and select “Web Service.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfhjx5mchgu80x4e7cu4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfhjx5mchgu80x4e7cu4.png" alt="New Webservice" width="800" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect your GitHub repository containing your MERN stack project.&lt;/li&gt;
&lt;li&gt;Select the &lt;code&gt;server&lt;/code&gt; directory when prompted for the root directory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiw5ovsxsbm07jau3dikq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiw5ovsxsbm07jau3dikq.png" alt="Project Specifications" width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Configure Environment Variables on Render
&lt;/h3&gt;

&lt;p&gt;Navigate to the “Environment” section in your Render dashboard and add the environment variables from your &lt;code&gt;.env&lt;/code&gt; file. This ensures that your application has access to the necessary secrets and API keys in the production environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4 Build and Deploy
&lt;/h3&gt;

&lt;p&gt;Render will automatically detect your &lt;code&gt;package.json&lt;/code&gt; scripts and begin the build process. It will run the &lt;code&gt;build&lt;/code&gt; script, which triggers both the frontend and backend builds.&lt;/p&gt;

&lt;p&gt;Once the build is complete, your application will be deployed and accessible via the URL provided by Render.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎉 Conclusion
&lt;/h2&gt;

&lt;p&gt;Deploying a MERN stack application on Render is a straightforward process when you have a well-structured project and a clear understanding of your environment configurations. By following these steps, you can ensure a smooth deployment experience, while keeping your sensitive data secure with proper &lt;code&gt;.gitignore&lt;/code&gt; and &lt;code&gt;.env&lt;/code&gt; management.&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀&lt;/p&gt;

</description>
      <category>mern</category>
      <category>github</category>
      <category>devops</category>
      <category>node</category>
    </item>
    <item>
      <title>Building RealTimeEdify: A Real-Time Collaborative Document Editing App with MERN Stack &amp; Socket.IO</title>
      <dc:creator>Rehman Khan</dc:creator>
      <pubDate>Sat, 24 Aug 2024 21:33:07 +0000</pubDate>
      <link>https://dev.to/slacky300/building-realtimeedify-a-real-time-collaborative-document-editing-app-with-mern-stack-socketio-74b</link>
      <guid>https://dev.to/slacky300/building-realtimeedify-a-real-time-collaborative-document-editing-app-with-mern-stack-socketio-74b</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Hello, Dev Community! 🙌
&lt;/h2&gt;

&lt;p&gt;I’m excited to introduce &lt;strong&gt;RealTimeEdify&lt;/strong&gt;, a real-time collaborative document editing web application that I've developed using the MERN stack (MongoDB, Express.js, React, Node.js) and Socket.IO. This project allows users to create, edit, and collaborate on documents in real time with others. Below, I’ll walk you through the features, technology stack, and steps to get started with RealTimeEdify.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FSlacky300%2FREAL_TIME_DOCUMENT_COLLAB%2Fassets%2F98531038%2Fccc71196-ef17-4e6b-a009-6890ccf29801" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FSlacky300%2FREAL_TIME_DOCUMENT_COLLAB%2Fassets%2F98531038%2Fccc71196-ef17-4e6b-a009-6890ccf29801" alt="RealTimeEdify Screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Real-Time Document Collaboration
&lt;/h3&gt;

&lt;p&gt;RealTimeEdify enables users to create documents and collaborate with others in real time. Multiple users can edit the document simultaneously, with changes instantly reflected for all participants.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Collaborator Presence
&lt;/h3&gt;

&lt;p&gt;You can see who else is active in the document, with a list of online collaborators displayed in the app. This feature enhances the collaborative experience by making it clear who’s working on the document.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Email Verification
&lt;/h3&gt;

&lt;p&gt;For security and user authentication, RealTimeEdify implements email verification. Users receive an email with a verification link upon registration to ensure that accounts are secure.&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FSlacky300%2FREAL_TIME_EDIFY%2Fassets%2F98531038%2F1ecad94d-eb4b-408c-9b84-9434a9994461" class="article-body-image-wrapper"&gt;&lt;img alt="Email Verification" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FSlacky300%2FREAL_TIME_EDIFY%2Fassets%2F98531038%2F1ecad94d-eb4b-408c-9b84-9434a9994461"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Seamless Real-Time Editing
&lt;/h3&gt;

&lt;p&gt;I integrated &lt;strong&gt;Quill&lt;/strong&gt;, a powerful WYSIWYG editor, into RealTimeEdify to offer a seamless real-time editing experience. Collaborators can see live updates as others make edits, enhancing productivity and communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Technologies Used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;MERN Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MongoDB&lt;/strong&gt;: Used as the NoSQL database to store user data and document content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Express.js&lt;/strong&gt;: Serves as the backend framework to build the API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React&lt;/strong&gt;: Powers the frontend, providing a dynamic user interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt;: Handles the server-side operations.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Socket.IO:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enables real-time bidirectional communication between clients and the server, making collaborative editing and presence tracking possible.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Quill:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A feature-rich WYSIWYG editor used for document editing, customized to handle real-time collaboration.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Follow these steps to run RealTimeEdify locally:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone the repository:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git clone https://github.com/your-username/RealTimeEdify.git
   &lt;span class="nb"&gt;cd &lt;/span&gt;RealTimeEdify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install dependencies for frontend:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;cd &lt;/span&gt;src/client
   npm i
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install dependencies for backend:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;cd &lt;/span&gt;src
   npm i
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Set up .env variables by creating a .env file in the server directory and adding the following variables:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;For server side:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="nv"&gt;MONGODB_URI&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_mongo_db_uri
    &lt;span class="nv"&gt;JWT_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_jwt_secret
    &lt;span class="nv"&gt;PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8000
    &lt;span class="nv"&gt;PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_app_password_for_email
    &lt;span class="nv"&gt;EMAIL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_gmail_email
    &lt;span class="nv"&gt;BACKEND_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_backend_url/api/v1
    &lt;span class="nv"&gt;FRONTEND_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_frontend_url
    &lt;span class="nv"&gt;PRODUCTION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;your_mongodb_connection_string&lt;/code&gt;, &lt;code&gt;your_jwt_secret&lt;/code&gt;, &lt;code&gt;your_email_username&lt;/code&gt;, &lt;code&gt;your_email_password&lt;/code&gt;, &lt;code&gt;your_email_host&lt;/code&gt;, and &lt;code&gt;your_email_port&lt;/code&gt; with your own values.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you are using Gmail for sending emails, you need to enable "Less secure app access" in your Google account settings.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For client side:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="nv"&gt;VITE_APP_BACKEND_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_backend_url/api/v1
    &lt;span class="nv"&gt;VITE_APP_SOCKET_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_backend_url
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;your_backend_url&lt;/code&gt; with the URL where the backend server is running.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run the frontend&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="nb"&gt;cd &lt;/span&gt;src/client
    npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run the backend&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="nb"&gt;cd &lt;/span&gt;src
    npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Access the application in your browser at &lt;a href="http://localhost:5173" rel="noopener noreferrer"&gt;http://localhost:5173&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Create an account and start collaborating on documents!&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;🔗 &lt;strong&gt;Check out the live website:&lt;/strong&gt; &lt;a href="https://edify.slacky.xyz" rel="noopener noreferrer"&gt;edify.slacky.xyz&lt;/a&gt;&lt;br&gt;&lt;br&gt;
💻 &lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/Slacky300/REAL_TIME_EDIFY" rel="noopener noreferrer"&gt;GitHub - REAL_TIME_EDIFY&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Feel free to contribute and share your thoughts! 🚀&lt;br&gt;
I hope you find RealTimeEdify as exciting to use as I did building it! Let’s keep the conversation going—your feedback and contributions are always welcome. 🚀&lt;/p&gt;

</description>
      <category>react</category>
      <category>opensource</category>
      <category>javascript</category>
      <category>node</category>
    </item>
  </channel>
</rss>
