<?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: Vipin Yadav</title>
    <description>The latest articles on DEV Community by Vipin Yadav (@vipinyadav01).</description>
    <link>https://dev.to/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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3713179%2F08e26c90-a448-41ae-9398-4be03326cb86.jpg</url>
      <title>DEV Community: Vipin Yadav</title>
      <link>https://dev.to/vipinyadav01</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vipinyadav01"/>
    <language>en</language>
    <item>
      <title>Top 15 VS Code Extensions for React Developers in 2026</title>
      <dc:creator>Vipin Yadav</dc:creator>
      <pubDate>Sat, 29 Aug 2026 18:26:21 +0000</pubDate>
      <link>https://dev.to/vipinyadav01/top-15-vs-code-extensions-for-react-developers-in-2026-2p4e</link>
      <guid>https://dev.to/vipinyadav01/top-15-vs-code-extensions-for-react-developers-in-2026-2p4e</guid>
      <description>&lt;h1&gt;
  
  
  Top 15 VS Code Extensions for React Developers in 2026
&lt;/h1&gt;

&lt;p&gt;A modern React workflow is about more than writing JSX. Between TypeScript, linting, formatting, Tailwind CSS, Git, API development, and increasingly complex project structures, the right VS Code extensions can eliminate repetitive work and make problems easier to spot.&lt;/p&gt;

&lt;p&gt;Here are &lt;strong&gt;15 useful VS Code extensions for React, Next.js, TypeScript, and modern frontend development in 2026&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You don't need all 15. Start with the core extensions and add others based on your workflow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🔥 Core React &amp;amp; TypeScript Development
&lt;/h2&gt;

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

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;dbaeumer.vscode-eslint&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;ESLint helps identify problematic JavaScript and TypeScript patterns and can automatically apply supported fixes.&lt;/p&gt;

&lt;p&gt;In React projects, ESLint becomes especially useful when combined with React- and TypeScript-specific ESLint plugins.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Prettier - Code Formatter
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;esbenp.prettier-vscode&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Prettier automatically formats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;JSX / TSX&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;Markdown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A common setup is:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.formatOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.defaultFormatter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"esbenp.prettier-vscode"&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;p&gt;For team projects, keep the Prettier configuration in the repository so everyone uses the same formatting rules.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. ES7+ React/Redux/React-Native Snippets
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;dsznajder.es7-react-js-snippets&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This extension provides snippets for commonly used React patterns.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;can be used to generate a functional component snippet.&lt;/p&gt;

&lt;p&gt;Snippets are useful when you repeatedly create similar components, although they are entirely optional.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Auto Rename Tag
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;formulahendry.auto-rename-tag&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Auto Rename Tag updates the corresponding closing tag when you rename an opening HTML or JSX tag.&lt;/p&gt;

&lt;p&gt;This can be convenient when editing nested JSX structures.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Path Intellisense
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;christian-kohler.path-intellisense&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Path Intellisense provides autocomplete for file paths when writing imports.&lt;/p&gt;

&lt;p&gt;For example:&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;Button&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/ui/Button&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;It's useful in projects with many directories and files.&lt;/p&gt;

&lt;p&gt;Keep in mind that modern TypeScript and VS Code already provide good import support, so this extension is optional.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Productivity &amp;amp; Debugging
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6. Error Lens
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;usernamehw.errorlens&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Error Lens displays diagnostics directly in the editor instead of requiring you to hover over every error.&lt;/p&gt;

&lt;p&gt;It's particularly useful when working with TypeScript because complex type errors can otherwise be easy to miss.&lt;/p&gt;




&lt;h3&gt;
  
  
  7. GitLens
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;eamodio.gitlens&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;GitLens adds additional Git features to VS Code, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inline blame&lt;/li&gt;
&lt;li&gt;File history&lt;/li&gt;
&lt;li&gt;Line history&lt;/li&gt;
&lt;li&gt;Commit exploration&lt;/li&gt;
&lt;li&gt;Branch comparisons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;VS Code already includes built-in Git support, so GitLens is best treated as an optional productivity extension.&lt;/p&gt;




&lt;h3&gt;
  
  
  8. Thunder Client
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;rangav.vscode-thunder-client&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Thunder Client provides an HTTP client inside VS Code for testing APIs.&lt;/p&gt;

&lt;p&gt;It can be useful when developing React or Next.js applications that communicate with REST APIs.&lt;/p&gt;




&lt;h3&gt;
  
  
  9. REST Client
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;humao.rest-client&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;REST Client lets you write and execute HTTP requests directly from &lt;code&gt;.http&lt;/code&gt; or &lt;code&gt;.rest&lt;/code&gt; files.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET https://api.example.com/users

###

POST https://api.example.com/users
Content-Type: application/json

{
  "name": "Vipin"
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;REST Client and Thunder Client solve a similar problem. You usually only need one.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  10. Code Spell Checker
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;streetsidesoftware.code-spell-checker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Code Spell Checker detects common spelling mistakes in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variable names&lt;/li&gt;
&lt;li&gt;Component names&lt;/li&gt;
&lt;li&gt;Comments&lt;/li&gt;
&lt;li&gt;Strings&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a small but useful quality-of-life improvement.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎨 Styling &amp;amp; TypeScript
&lt;/h2&gt;

&lt;h3&gt;
  
  
  11. Tailwind CSS IntelliSense
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;bradlc.vscode-tailwindcss&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you're using Tailwind CSS, this is one of the most useful extensions in the list.&lt;/p&gt;

&lt;p&gt;It provides features such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Class autocomplete&lt;/li&gt;
&lt;li&gt;Syntax highlighting&lt;/li&gt;
&lt;li&gt;Hover information&lt;/li&gt;
&lt;li&gt;CSS previews&lt;/li&gt;
&lt;li&gt;Diagnostics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your project doesn't use Tailwind CSS, you can skip it.&lt;/p&gt;




&lt;h3&gt;
  
  
  12. Pretty TypeScript Errors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;yoavbls.pretty-ts-errors&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Complex TypeScript errors can become difficult to understand when generics, conditional types, and utility types are heavily nested.&lt;/p&gt;

&lt;p&gt;Pretty TypeScript Errors improves the readability of TypeScript diagnostics.&lt;/p&gt;

&lt;p&gt;It's useful for TypeScript-heavy projects but isn't necessary for everyone.&lt;/p&gt;




&lt;h3&gt;
  
  
  13. npm Intellisense
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;christian-kohler.npm-intellisense&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;npm Intellisense provides autocomplete for npm packages while writing imports.&lt;/p&gt;

&lt;p&gt;For example:&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;axios&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;axios&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;It can make package imports more convenient, although VS Code and TypeScript already provide substantial import assistance.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧹 Code Quality &amp;amp; Workflow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  14. Better Comments
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;aaron-bond.better-comments&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Better Comments makes different types of comments easier to distinguish visually.&lt;/p&gt;

&lt;p&gt;For example:&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="c1"&gt;// TODO: Add loading state&lt;/span&gt;

&lt;span class="c1"&gt;// FIXME: Handle expired session&lt;/span&gt;

&lt;span class="c1"&gt;// ? Should this logic become a custom hook?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's useful if your team actively uses comments for TODOs and technical debt.&lt;/p&gt;




&lt;h3&gt;
  
  
  15. Code Runner
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Extension ID:&lt;/strong&gt; &lt;code&gt;formulahendry.code-runner&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Code Runner allows you to quickly execute small JavaScript or TypeScript snippets from VS Code.&lt;/p&gt;

&lt;p&gt;For example:&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;numbers&lt;/span&gt; &lt;span class="o"&gt;=&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&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="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's useful for quick experiments.&lt;/p&gt;

&lt;p&gt;However, for real React applications, you should normally use the project's configured runtime, scripts, and development server rather than Code Runner.&lt;/p&gt;

&lt;h1&gt;
  
  
  ⭐ My Recommended React Stack
&lt;/h1&gt;

&lt;p&gt;You don't need every extension on this list.&lt;/p&gt;

&lt;p&gt;For a typical &lt;strong&gt;React + TypeScript&lt;/strong&gt; project, I'd start with:&lt;/p&gt;

&lt;h3&gt;
  
  
  Essential
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ESLint&lt;/li&gt;
&lt;li&gt;Prettier&lt;/li&gt;
&lt;li&gt;Error Lens&lt;/li&gt;
&lt;li&gt;Auto Rename Tag&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Optional Git Productivity
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;GitLens&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  If you're using Tailwind
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tailwind CSS IntelliSense&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  If you're working heavily with TypeScript
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pretty TypeScript Errors&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  If you're working with APIs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;REST Client &lt;strong&gt;or&lt;/strong&gt; Thunder Client&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Other Optional Extensions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Path Intellisense&lt;/li&gt;
&lt;li&gt;Code Spell Checker&lt;/li&gt;
&lt;li&gt;React Snippets&lt;/li&gt;
&lt;li&gt;Better Comments&lt;/li&gt;
&lt;li&gt;npm Intellisense&lt;/li&gt;
&lt;li&gt;Code Runner&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚙️ Recommended &lt;code&gt;settings.json&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Here's a reasonable starting point for a React + TypeScript project:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.formatOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.defaultFormatter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"esbenp.prettier-vscode"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"editor.codeActionsOnSave"&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;"source.fixAll.eslint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"explicit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"source.organizeImports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"explicit"&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;"emmet.includeLanguages"&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;"javascript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"javascriptreact"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typescript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"typescriptreact"&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;"typescript.updateImportsOnFileMove.enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"always"&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;p&gt;You don't have to use every setting here. In particular, &lt;code&gt;source.organizeImports&lt;/code&gt; can sometimes produce unwanted import changes depending on your project's conventions.&lt;/p&gt;

&lt;p&gt;For team projects, it's often better to define linting and formatting behavior in the project configuration rather than relying entirely on personal VS Code settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎨 Theme &amp;amp; Typography
&lt;/h2&gt;

&lt;p&gt;Popular VS Code themes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Theme&lt;/li&gt;
&lt;li&gt;Tokyo Night&lt;/li&gt;
&lt;li&gt;One Dark Pro&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For icons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Material Icon Theme&lt;/li&gt;
&lt;li&gt;Catppuccin Icons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For fonts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JetBrains Mono&lt;/li&gt;
&lt;li&gt;Fira Code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you like programming ligatures:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.fontFamily"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"'JetBrains Mono', 'Fira Code', monospace"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.fontLigatures"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&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;p&gt;Ligatures are purely visual and don't improve or reduce your application's runtime performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚠️ Don't Install Extensions Just Because They're Popular
&lt;/h2&gt;

&lt;p&gt;A productive VS Code setup isn't about installing 50 extensions.&lt;/p&gt;

&lt;p&gt;Every extension adds another piece of tooling to your development environment, so install extensions when they solve an actual problem.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don't install Tailwind CSS IntelliSense if you don't use Tailwind.&lt;/li&gt;
&lt;li&gt;Don't install both Thunder Client and REST Client unless you have a reason to use both.&lt;/li&gt;
&lt;li&gt;Don't install GitLens if VS Code's built-in Git features are already enough.&lt;/li&gt;
&lt;li&gt;Don't install an extension for functionality that VS Code or TypeScript already handles well.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to have the most extensions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The goal is to have the right extensions.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;If I were starting a fresh React + TypeScript project, my initial setup would be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ESLint
Prettier
Error Lens
Auto Rename Tag
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I'd add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitLens                     # If you want advanced Git features
Tailwind CSS IntelliSense   # Tailwind projects
Pretty TypeScript Errors    # TypeScript-heavy projects
REST Client                 # API development
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;A fast development environment isn't the one with the most extensions. It's the one where every installed extension earns its place.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;What VS Code extensions are part of your daily React workflow?&lt;/p&gt;

&lt;p&gt;Share your favorites below. 👇&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Connect With Me
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Dev.to:&lt;/strong&gt; dev.to/vipinyadav01&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Portfolio:&lt;/strong&gt; devxvipin.me&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; github.com/vipinyadav01&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>vscode</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Deploying Full Stack Apps to Vercel: Complete Guide</title>
      <dc:creator>Vipin Yadav</dc:creator>
      <pubDate>Wed, 27 May 2026 21:49:15 +0000</pubDate>
      <link>https://dev.to/vipinyadav01/deploying-full-stack-apps-to-vercel-complete-guide-3o2c</link>
      <guid>https://dev.to/vipinyadav01/deploying-full-stack-apps-to-vercel-complete-guide-3o2c</guid>
      <description>&lt;h1&gt;
  
  
  Deploying Full Stack Apps to Vercel: The Complete Production Guide
&lt;/h1&gt;

&lt;p&gt;Deploying a frontend application to Vercel is incredibly simple — often just a few clicks.&lt;br&gt;&lt;br&gt;
But deploying a &lt;strong&gt;production-ready full stack application&lt;/strong&gt; requires a deeper understanding of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serverless functions&lt;/li&gt;
&lt;li&gt;Environment variables&lt;/li&gt;
&lt;li&gt;Database connection handling&lt;/li&gt;
&lt;li&gt;CORS policies&lt;/li&gt;
&lt;li&gt;API routing&lt;/li&gt;
&lt;li&gt;Domain configuration&lt;/li&gt;
&lt;li&gt;Deployment architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you're deploying a &lt;strong&gt;Next.js SaaS platform&lt;/strong&gt;, a &lt;strong&gt;MERN stack application&lt;/strong&gt;, or an &lt;strong&gt;AI-powered web app&lt;/strong&gt;, this guide covers everything you need to know.&lt;/p&gt;


&lt;h1&gt;
  
  
  Why Use Vercel for Full Stack Apps?
&lt;/h1&gt;

&lt;p&gt;Vercel is no longer just a static hosting platform.&lt;br&gt;&lt;br&gt;
With &lt;strong&gt;Serverless Functions&lt;/strong&gt;, &lt;strong&gt;Edge Middleware&lt;/strong&gt;, and seamless Git integrations, it has become one of the best platforms for modern full stack deployments.&lt;/p&gt;
&lt;h2&gt;
  
  
  Key Advantages
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ⚡ Global Edge Network
&lt;/h3&gt;

&lt;p&gt;Your frontend assets are automatically cached across Vercel’s global CDN for faster loading times and better Core Web Vitals.&lt;/p&gt;
&lt;h3&gt;
  
  
  🚀 Automatic Scaling
&lt;/h3&gt;

&lt;p&gt;API routes scale automatically depending on traffic demand.&lt;/p&gt;
&lt;h3&gt;
  
  
  🔄 Git-Based Deployments
&lt;/h3&gt;

&lt;p&gt;Every Git push generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Preview deployments&lt;/li&gt;
&lt;li&gt;Production builds&lt;/li&gt;
&lt;li&gt;Rollback support&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🔒 Built-In SSL
&lt;/h3&gt;

&lt;p&gt;Every deployment gets HTTPS enabled automatically.&lt;/p&gt;
&lt;h3&gt;
  
  
  🧠 Excellent DX (Developer Experience)
&lt;/h3&gt;

&lt;p&gt;Minimal DevOps overhead lets you focus on building products instead of managing infrastructure.&lt;/p&gt;


&lt;h1&gt;
  
  
  Prerequisites
&lt;/h1&gt;

&lt;p&gt;Before deploying, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A GitHub/GitLab/Bitbucket repository&lt;/li&gt;
&lt;li&gt;A Vercel account&lt;/li&gt;
&lt;li&gt;A production database&lt;/li&gt;
&lt;li&gt;Environment variables ready&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Recommended Databases
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Database&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MongoDB Atlas&lt;/td&gt;
&lt;td&gt;MERN applications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Neon PostgreSQL&lt;/td&gt;
&lt;td&gt;Next.js + Prisma&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;Realtime apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PlanetScale&lt;/td&gt;
&lt;td&gt;Scalable MySQL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  Understanding Full Stack Architectures on Vercel
&lt;/h1&gt;

&lt;p&gt;There are two common approaches.&lt;/p&gt;


&lt;h1&gt;
  
  
  1. Decoupled Architecture (MERN Stack)
&lt;/h1&gt;

&lt;p&gt;Frontend and backend are deployed separately.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-app/
├── client/          # React / Vite frontend
└── server/          # Express backend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Typical Stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;TailwindCSS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express.js&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  2. Monolithic Architecture (Next.js)
&lt;/h1&gt;

&lt;p&gt;Everything lives in a single repository.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-next-app/
├── app/
│   ├── page.tsx
│   └── api/
│       └── users/route.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is currently the most optimized architecture for Vercel.&lt;/p&gt;




&lt;h1&gt;
  
  
  Deploying a MERN Backend on Vercel
&lt;/h1&gt;

&lt;p&gt;Unlike traditional VPS hosting, Vercel runs backend APIs as &lt;strong&gt;serverless functions&lt;/strong&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;No permanent server process&lt;/li&gt;
&lt;li&gt;No &lt;code&gt;app.listen()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Functions spin up only when needed&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Setting Up &lt;code&gt;vercel.json&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Create a &lt;code&gt;vercel.json&lt;/code&gt; file inside your backend directory.&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"builds"&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"api/index.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;"use"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@vercel/node"&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="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"routes"&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"dest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"api/index.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;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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells Vercel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which file is the serverless entry point&lt;/li&gt;
&lt;li&gt;How to route incoming traffic&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Express Server Setup for Vercel
&lt;/h1&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;api/index.js&lt;/code&gt;
&lt;/h2&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;cors&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;cors&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;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="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="nf"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;origin&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;CLIENT_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;credentials&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;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;express&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;app&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;/api/health&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;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="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;success&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;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;API Running&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;app&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Important: Never Use &lt;code&gt;app.listen()&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;This is one of the biggest mistakes beginners make.&lt;/p&gt;

&lt;p&gt;❌ Wrong:&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;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Correct:&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="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vercel handles the server lifecycle automatically.&lt;/p&gt;




&lt;h1&gt;
  
  
  Environment Variables
&lt;/h1&gt;

&lt;p&gt;Never push secrets to GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add Variables in Vercel Dashboard
&lt;/h2&gt;

&lt;p&gt;Go to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Project → Settings → Environment Variables
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Common Variables
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MONGODB_URI=
JWT_SECRET=
CLIENT_URL=
NEXTAUTH_SECRET=
DATABASE_URL=
OPENAI_API_KEY=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Database Connection Best Practices
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Serverless functions are stateless.&lt;/p&gt;

&lt;p&gt;Every request may create a new database connection.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;You hit connection limits&lt;/li&gt;
&lt;li&gt;Performance becomes unstable&lt;/li&gt;
&lt;li&gt;APIs become slow&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  MongoDB Connection Caching
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Recommended Approach
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;isConnected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="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;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isConnected&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&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;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;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;MONGODB_URI&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;isConnected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;connections&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;readyState&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;h1&gt;
  
  
  Prisma Setup for Next.js
&lt;/h1&gt;

&lt;p&gt;If using Prisma:&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;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;PrismaClient&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="s1"&gt;@prisma/client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;globalForPrisma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;globalThis&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prisma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="nx"&gt;globalForPrisma&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prisma&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;PrismaClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;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;NODE_ENV&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;production&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nx"&gt;globalForPrisma&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prisma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;prisma&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents multiple Prisma instances during development.&lt;/p&gt;




&lt;h1&gt;
  
  
  Deploying Frontend + Backend Separately
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Frontend Deployment
&lt;/h2&gt;

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

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Backend Deployment
&lt;/h2&gt;

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

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

&lt;/div&gt;



&lt;p&gt;Then connect them using environment variables.&lt;/p&gt;




&lt;h1&gt;
  
  
  Connecting Frontend to Backend
&lt;/h1&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;VITE_API_URL=https://your-api.vercel.app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NEXT_PUBLIC_API_URL=https://your-api.vercel.app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Deploying with GitHub (Recommended)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Step-by-Step
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Push Code to GitHub
&lt;/h3&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;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial deployment"&lt;/span&gt;
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. Import Repository in Vercel
&lt;/h3&gt;

&lt;p&gt;Go to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add New&lt;/li&gt;
&lt;li&gt;Project&lt;/li&gt;
&lt;li&gt;Import Git Repository&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. Configure Root Directory
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;Root Directory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/client&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/server&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Next.js&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  4. Add Environment Variables
&lt;/h3&gt;

&lt;p&gt;Paste all required secrets before deployment.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Deploy
&lt;/h3&gt;

&lt;p&gt;Vercel automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installs dependencies&lt;/li&gt;
&lt;li&gt;Builds the project&lt;/li&gt;
&lt;li&gt;Creates preview deployments&lt;/li&gt;
&lt;li&gt;Generates a production URL&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Deploying with Vercel CLI
&lt;/h1&gt;

&lt;p&gt;Install CLI:&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;-g&lt;/span&gt; vercel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;p&gt;Production deployment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vercel &lt;span class="nt"&gt;--prod&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Custom Domain Setup
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Add Your Domain
&lt;/h2&gt;

&lt;p&gt;Go to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Project → Settings → Domains
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yourdomain.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  DNS Configuration
&lt;/h1&gt;

&lt;p&gt;Vercel will provide records like:&lt;/p&gt;

&lt;h2&gt;
  
  
  A Record
&lt;/h2&gt;



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

&lt;/div&gt;



&lt;h2&gt;
  
  
  CNAME Record
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cname.vercel-dns.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Common Deployment Issues
&lt;/h1&gt;




&lt;h1&gt;
  
  
  1. CORS Errors
&lt;/h1&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Access-Control-Allow-Origin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;origin&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;CLIENT_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;credentials&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Correct production frontend URL&lt;/li&gt;
&lt;li&gt;No trailing slash mismatch&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  2. Function Timeout Errors
&lt;/h1&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;504 Gateway Timeout
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Cause
&lt;/h2&gt;

&lt;p&gt;Heavy processing inside serverless functions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Solutions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use Background Jobs
&lt;/h3&gt;

&lt;p&gt;Recommended services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inngest&lt;/li&gt;
&lt;li&gt;Upstash QStash&lt;/li&gt;
&lt;li&gt;Trigger.dev&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Optimize Database Queries
&lt;/h3&gt;

&lt;p&gt;Avoid:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large aggregations&lt;/li&gt;
&lt;li&gt;Blocking operations&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  3. Build Failures
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Common Reasons
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Missing Environment Variables
&lt;/h3&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;DATABASE_URL missing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Incorrect Node Version
&lt;/h3&gt;

&lt;p&gt;Specify:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engines"&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;"node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"20.x"&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="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  4. API Routes Not Working
&lt;/h1&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File naming&lt;/li&gt;
&lt;li&gt;Export syntax&lt;/li&gt;
&lt;li&gt;Route paths&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vercel.json&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Production Deployment Tips
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Use Separate Environments
&lt;/h2&gt;

&lt;p&gt;Vercel supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Development&lt;/li&gt;
&lt;li&gt;Preview&lt;/li&gt;
&lt;li&gt;Production&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Enable Analytics
&lt;/h1&gt;

&lt;p&gt;Vercel Analytics helps track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Speed&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;Core Web Vitals&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Use Edge Middleware Carefully
&lt;/h1&gt;

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

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Redirects&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But avoid heavy logic inside middleware.&lt;/p&gt;




&lt;h1&gt;
  
  
  Recommended Tech Stack for 2026
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Best Overall Stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Next.js 15&lt;/li&gt;
&lt;li&gt;TailwindCSS&lt;/li&gt;
&lt;li&gt;ShadCN UI&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Server Actions&lt;/li&gt;
&lt;li&gt;Route Handlers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Database
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;PostgreSQL + Prisma&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Auth
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Better Auth / Clerk&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Deployment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Vercel provides one of the best developer experiences for deploying modern full stack applications.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Serverless architecture&lt;/li&gt;
&lt;li&gt;Environment variable management&lt;/li&gt;
&lt;li&gt;Database optimization&lt;/li&gt;
&lt;li&gt;Routing strategies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;you can deploy highly scalable production-grade apps in minutes.&lt;/p&gt;

&lt;p&gt;The biggest advantage is speed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster iteration&lt;/li&gt;
&lt;li&gt;Preview deployments&lt;/li&gt;
&lt;li&gt;Minimal infrastructure management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which means more time building products and less time handling DevOps.&lt;/p&gt;




&lt;h1&gt;
  
  
  Useful Resources
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vercel.com/docs" rel="noopener noreferrer"&gt;https://vercel.com/docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nextjs.org/docs/deployment" rel="noopener noreferrer"&gt;https://nextjs.org/docs/deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com/atlas/database" rel="noopener noreferrer"&gt;https://www.mongodb.com/atlas/database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.prisma.io/" rel="noopener noreferrer"&gt;https://www.prisma.io/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>nextjs</category>
      <category>serverless</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <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://dev.to/vipinyadav01/how-i-reduced-my-docker-image-size-by-90-using-multi-stage-builds-p4h</link>
      <guid>https://dev.to/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://dev.to/vipinyadav01/how-i-built-launchtrack-an-ai-career-coach-with-nextjs-and-gemini-api-354</link>
      <guid>https://dev.to/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>
