<?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>Forem: Vipin Yadav</title>
    <description>The latest articles on Forem by Vipin Yadav (@vipinyadav01).</description>
    <link>https://forem.com/vipinyadav01</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%2F3713179%2F08e26c90-a448-41ae-9398-4be03326cb86.jpg</url>
      <title>Forem: Vipin Yadav</title>
      <link>https://forem.com/vipinyadav01</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/vipinyadav01"/>
    <language>en</language>
    <item>
      <title>How I Reduced My Docker Image Size by 90% Using Multi-Stage Builds</title>
      <dc:creator>Vipin Yadav</dc:creator>
      <pubDate>Wed, 28 Jan 2026 17:06:58 +0000</pubDate>
      <link>https://forem.com/vipinyadav01/how-i-reduced-my-docker-image-size-by-90-using-multi-stage-builds-p4h</link>
      <guid>https://forem.com/vipinyadav01/how-i-reduced-my-docker-image-size-by-90-using-multi-stage-builds-p4h</guid>
      <description>&lt;h1&gt;
  
  
  Optimizing Docker Images: From Gigabytes to Megabytes
&lt;/h1&gt;

&lt;p&gt;Docker images bloating to several gigabytes? Your container deployments taking forever? Multi-stage builds are the key to shrinking images, as seen in this transition from &lt;strong&gt;1.2GB to 120MB&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Standard Dockerfile builds include everything: build tools, dev dependencies, source files, and compilation artifacts. Your production container doesn't need any of that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before (1.2GB):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:18&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm run build
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "dist/server.js"]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Solution: Multi-Stage Builds
&lt;/h2&gt;

&lt;p&gt;Multi-stage builds allow the use of multiple &lt;code&gt;FROM&lt;/code&gt; statements. Each stage can copy artifacts from previous stages while leaving behind everything else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After (120MB):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Stage 1: Build&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci &lt;span class="nt"&gt;--only&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm run build

&lt;span class="c"&gt;# Stage 2: Production&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:18-alpine&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/dist ./dist&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/node_modules ./node_modules&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; node&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "dist/server.js"]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Key Improvements
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Alpine Base Image&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;node:18&lt;/code&gt; ≈ 900MB&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;node:18-alpine&lt;/code&gt; ≈ 110MB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Production Dependencies Only&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;npm ci --only=production&lt;/code&gt; excludes &lt;code&gt;devDependencies&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No TypeScript, testing frameworks, or linters in the production layer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Selective Copying&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Only copies &lt;code&gt;dist/&lt;/code&gt;, &lt;code&gt;node_modules/&lt;/code&gt;, and necessary config files.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Real-World Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Go Application
&lt;/h3&gt;

&lt;p&gt;Go benefits significantly as the entire compiler is excluded from the final image.&lt;br&gt;
&lt;strong&gt;Result: 800MB → 15MB&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Build stage&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;golang:1.21&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; go.mod go.sum ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;go mod download
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nv"&gt;CGO_ENABLED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nv"&gt;GOOS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;linux go build &lt;span class="nt"&gt;-o&lt;/span&gt; main .

&lt;span class="c"&gt;# Production stage&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; alpine:latest&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apk &lt;span class="nt"&gt;--no-cache&lt;/span&gt; add ca-certificates
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /root/&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/main .&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["./main"]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Python with pip
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;python:3.11&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; requirements.txt .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--user&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.11-slim&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /root/.local /root/.local&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; PATH=/root/.local/bin:$PATH&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "app.py"]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Java with Maven
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;maven:3.9-openjdk-17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; pom.xml .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;mvn dependency:go-offline
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; src ./src&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;mvn package &lt;span class="nt"&gt;-DskipTests&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; openjdk:17-jdk-slim&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/target/*.jar app.jar&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["java", "-jar", "app.jar"]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Best Practices &amp;amp; Performance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Optimization Tips
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Order Layers by Change Frequency:&lt;/strong&gt; Place &lt;code&gt;COPY package*.json&lt;/code&gt; before &lt;code&gt;COPY .&lt;/code&gt; to leverage layer caching.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;code&gt;.dockerignore&lt;/code&gt;:&lt;/strong&gt; Exclude &lt;code&gt;node_modules&lt;/code&gt;, &lt;code&gt;.git&lt;/code&gt;, and environment files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Combine Commands:&lt;/strong&gt; Use &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; and &lt;code&gt;\&lt;/code&gt; to reduce the number of layers in a single stage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance Impact
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build Time (Subsequent)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;60% Faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Push/Pull Time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~85-90% Faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Disk Space&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;90% Reduction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory Usage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;40% Reduction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Debugging Multi-Stage Builds
&lt;/h2&gt;

&lt;p&gt;You can build or inspect specific stages using the &lt;code&gt;--target&lt;/code&gt; flag:&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;# Build specific stage for debugging&lt;/span&gt;
docker build &lt;span class="nt"&gt;--target&lt;/span&gt; builder &lt;span class="nt"&gt;-t&lt;/span&gt; myapp:debug &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Inspect intermediate layers&lt;/span&gt;
docker &lt;span class="nb"&gt;history &lt;/span&gt;myapp:builder

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;The initial investment in refactoring your Dockerfile pays dividends in performance, cost, and developer experience. Start with your largest images first—that's where you'll see the biggest wins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What size reduction did you achieve? Share your results below!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#docker&lt;/code&gt; &lt;code&gt;#devops&lt;/code&gt; &lt;code&gt;#containers&lt;/code&gt; &lt;code&gt;#performance&lt;/code&gt;&lt;/p&gt;




</description>
      <category>docker</category>
      <category>webdev</category>
      <category>devops</category>
      <category>containers</category>
    </item>
    <item>
      <title>How I Built LaunchTrack: An AI Career Coach with Next.js and Gemini API</title>
      <dc:creator>Vipin Yadav</dc:creator>
      <pubDate>Fri, 16 Jan 2026 04:30:00 +0000</pubDate>
      <link>https://forem.com/vipinyadav01/how-i-built-launchtrack-an-ai-career-coach-with-nextjs-and-gemini-api-354</link>
      <guid>https://forem.com/vipinyadav01/how-i-built-launchtrack-an-ai-career-coach-with-nextjs-and-gemini-api-354</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Hey everyone! 👋

I'm excited to share my latest project - &lt;span class="gs"&gt;**LaunchTrack**&lt;/span&gt;, an AI-powered career coaching platform. In this post, I'll walk you through how I built it and the technologies I used.

&lt;span class="gu"&gt;## 🚀 What is LaunchTrack?&lt;/span&gt;

LaunchTrack is an AI career coach that helps job seekers with:
&lt;span class="p"&gt;
-&lt;/span&gt; Personalized job search support
&lt;span class="p"&gt;-&lt;/span&gt; Interview preparation
&lt;span class="p"&gt;-&lt;/span&gt; Resume analysis
&lt;span class="p"&gt;-&lt;/span&gt; Career advice powered by AI

&lt;span class="gs"&gt;**Live Demo:**&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;launchtrack.vercel.app&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://launchtrack.vercel.app&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="gs"&gt;**GitHub:**&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;github.com/vipinyadav01/aicareercoach&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://github.com/vipinyadav01/aicareercoach&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="gu"&gt;## 🛠️ Tech Stack&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="gs"&gt;**Frontend:**&lt;/span&gt; Next.js 14 (App Router)
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**AI:**&lt;/span&gt; Google Gemini API
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Database:**&lt;/span&gt; Prisma + PostgreSQL
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Authentication:**&lt;/span&gt; Clerk
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Styling:**&lt;/span&gt; Tailwind CSS + Shadcn UI
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**State Management:**&lt;/span&gt; Zustand
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Background Jobs:**&lt;/span&gt; Inngest

&lt;span class="gu"&gt;## 💡 Key Features&lt;/span&gt;

&lt;span class="gu"&gt;### 1. AI-Powered Career Advice&lt;/span&gt;

Using Google Gemini API, users get personalized career guidance based on their profile and goals.

&lt;span class="gu"&gt;### 2. Resume Analysis&lt;/span&gt;

Upload your resume and get instant AI feedback on how to improve it.

&lt;span class="gu"&gt;### 3. Interview Preparation&lt;/span&gt;

Practice with AI-generated interview questions tailored to your target role.

&lt;span class="gu"&gt;### 4. PWA Support&lt;/span&gt;

Works offline and can be installed as a mobile app!

&lt;span class="gu"&gt;## 🔧 Architecture Overview&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;┌─────────────────────────────────────────────┐&lt;br&gt;
│ Next.js App │&lt;br&gt;
├─────────────────────────────────────────────┤&lt;br&gt;
│ Pages │ API Routes │ Server Actions │&lt;br&gt;
├─────────────────────────────────────────────┤&lt;br&gt;
│ Prisma ORM │&lt;br&gt;
├─────────────────────────────────────────────┤&lt;br&gt;
│ PostgreSQL │ Gemini API │ Inngest │&lt;br&gt;
└─────────────────────────────────────────────┘&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
## 🎯 Challenges &amp;amp; Solutions

### Challenge 1: Rate Limiting Gemini API
**Solution:** Implemented request queuing with Inngest background jobs.

### Challenge 2: Streaming AI Responses
**Solution:** Used Next.js Edge Runtime with streaming responses.

### Challenge 3: PWA Offline Support
**Solution:** Configured next-pwa with custom service worker caching.

## 📊 Results

- ⚡ **Lighthouse Score:** 95+
- 📱 **PWA:** Installable on all devices
- 🔒 **Security:** A+ rating

## 🔗 Links

- **Portfolio:** [devxvipin.me](https://devxvipin.me)
- **GitHub:** [github.com/vipinyadav01](https://github.com/vipinyadav01)
- **LinkedIn:** [linkedin.com/in/vipinyadav01](https://linkedin.com/in/vipinyadav01)

---

Thanks for reading! Let me know if you have any questions in the comments.

Follow me for more web development content! 🚀

#nextjs #ai #webdev #javascript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
