<?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: Shivam Gupta</title>
    <description>The latest articles on DEV Community by Shivam Gupta (@shivamm2606).</description>
    <link>https://dev.to/shivamm2606</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%2F3874041%2Ff119daa0-2339-4ec0-a496-18aa96d918a1.png</url>
      <title>DEV Community: Shivam Gupta</title>
      <link>https://dev.to/shivamm2606</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shivamm2606"/>
    <language>en</language>
    <item>
      <title>I Got Tired of Copying the Same MERN Boilerplate, So I Built a CLI</title>
      <dc:creator>Shivam Gupta</dc:creator>
      <pubDate>Sat, 11 Apr 2026 19:47:09 +0000</pubDate>
      <link>https://dev.to/shivamm2606/i-got-tired-of-copying-the-same-mern-boilerplate-so-i-built-a-cli-2b88</link>
      <guid>https://dev.to/shivamm2606/i-got-tired-of-copying-the-same-mern-boilerplate-so-i-built-a-cli-2b88</guid>
      <description>&lt;h2&gt;
  
  
  The problem every full-stack dev knows
&lt;/h2&gt;

&lt;p&gt;Every time I start a new project, the first hour looks the same:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;npm create vite@latest&lt;/code&gt; → pick React → set up Tailwind&lt;/li&gt;
&lt;li&gt;Create a &lt;code&gt;server/&lt;/code&gt; folder → &lt;code&gt;npm init&lt;/code&gt; → install Express, Mongoose, dotenv, cors&lt;/li&gt;
&lt;li&gt;Write the same &lt;code&gt;db.js&lt;/code&gt; connection file&lt;/li&gt;
&lt;li&gt;Copy CORS config from my last project&lt;/li&gt;
&lt;li&gt;Set up the proxy in &lt;code&gt;vite.config.js&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Copy the same JWT auth code if I need login&lt;/li&gt;
&lt;li&gt;Wire up React Router, protected routes, the whole thing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By the time I actually start building features, I'm already mentally drained. And every project's boilerplate was &lt;em&gt;slightly&lt;/em&gt; different because I'd "improve" it each time.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;QuickStack&lt;/strong&gt; — a CLI that does steps 1–7 in one command.&lt;/p&gt;




&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-quickstack-app my-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. You get:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What&lt;/th&gt;
&lt;th&gt;Tech&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;React + Vite + Tailwind CSS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Express.js + Mongoose&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth (optional)&lt;/td&gt;
&lt;td&gt;JWT + bcrypt + httpOnly cookies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DX&lt;/td&gt;
&lt;td&gt;NPM Workspaces, Axios preconfigured, one &lt;code&gt;npm run dev&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  You pick your stability level
&lt;/h2&gt;

&lt;p&gt;I noticed that some devs want the latest and greatest (React 19, Tailwind 4), while others want battle-tested versions for production. So QuickStack asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stable&lt;/strong&gt; → React 18.3, Tailwind v3, React Router v6&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latest&lt;/strong&gt; → React 19, Tailwind v4, React Router v7&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Auth is actually useful
&lt;/h2&gt;

&lt;p&gt;When you choose &lt;code&gt;--auth&lt;/code&gt;, you don't just get a login form. You get:&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;POST /api/user/register&lt;/code&gt; — Create account&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /api/user/login&lt;/code&gt; — Login, sets JWT as httpOnly cookie&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /api/user/logout&lt;/code&gt; — Clears session&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /api/user/me&lt;/code&gt; — Returns current user (protected)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Login and Signup pages with forms&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ProtectedRoute&lt;/code&gt; component that redirects to &lt;code&gt;/login&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Auth service with Axios interceptors&lt;/li&gt;
&lt;li&gt;React Router setup with all routes wired&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't a TODO app auth example. This is what I actually use in production.&lt;/p&gt;




&lt;h2&gt;
  
  
  How it's built
&lt;/h2&gt;

&lt;p&gt;The CLI uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;commander&lt;/code&gt; for argument parsing (&lt;code&gt;--auth&lt;/code&gt;, &lt;code&gt;--stable&lt;/code&gt;, &lt;code&gt;--latest&lt;/code&gt;, &lt;code&gt;--yes&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@inquirer/prompts&lt;/code&gt; for interactive prompts&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fs-extra&lt;/code&gt; for template copying&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chalk&lt;/code&gt; for terminal output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of string-templating files (which is fragile), QuickStack copies real, working project directories and patches them based on your choices. The templates in the repo are actual runnable code — you can &lt;code&gt;cd&lt;/code&gt; into them and they work.&lt;/p&gt;

&lt;p&gt;The version-specific stuff (React 18 vs 19, Tailwind 3 vs 4) is handled by a preset engine that rewrites &lt;code&gt;package.json&lt;/code&gt; dependencies and config files after copying the base template.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-quickstack-app my-app
&lt;span class="nb"&gt;cd &lt;/span&gt;my-app
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Client → &lt;code&gt;http://localhost:5173&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Server → &lt;code&gt;http://localhost:5000&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://npmjs.com/package/create-quickstack-app" rel="noopener noreferrer"&gt;https://npmjs.com/package/create-quickstack-app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/shivamm2606/quickstack" rel="noopener noreferrer"&gt;https://github.com/shivamm2606/quickstack&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript template variant&lt;/li&gt;
&lt;li&gt;Docker Compose included in scaffold&lt;/li&gt;
&lt;li&gt;PostgreSQL + Prisma as a database option&lt;/li&gt;
&lt;li&gt;More framework options (Next.js?)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;If this saves you even 30 minutes on your next project, I'll consider it a win.&lt;/p&gt;

&lt;p&gt;Would love to hear what features you'd want — feel free to open an issue or drop feedback.&lt;/p&gt;

&lt;p&gt;If you found this useful, a ⭐ on the GitHub repo would mean a lot. Thanks for reading!&lt;/p&gt;

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