<?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: vincanger</title>
    <description>The latest articles on Forem by vincanger (@vincanger).</description>
    <link>https://forem.com/vincanger</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%2F982343%2F99b7a039-13b3-4eb5-820b-da74b180ddf6.jpeg</url>
      <title>Forem: vincanger</title>
      <link>https://forem.com/vincanger</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/vincanger"/>
    <language>en</language>
    <item>
      <title>What's the Best Way to Vibe Code a SaaS in 2026?</title>
      <dc:creator>vincanger</dc:creator>
      <pubDate>Thu, 26 Mar 2026 09:05:13 +0000</pubDate>
      <link>https://forem.com/wasp/whats-the-best-way-to-vibe-code-a-saas-in-2026-9fh</link>
      <guid>https://forem.com/wasp/whats-the-best-way-to-vibe-code-a-saas-in-2026-9fh</guid>
      <description>&lt;p&gt;You've probably seen the tweets, the YouTube tutorials, and the "I built a SaaS in 24 hours with AI" posts. But if you've actually tried to vibe code a SaaS, you know the reality is &lt;em&gt;much&lt;/em&gt; messier than that.&lt;/p&gt;

&lt;p&gt;Luckily, there are a bunch of tools, SaaS boilerplate starters, and workflows that you can use to build a profitable (side) business with, as long as you know how to apply them correctly. &lt;/p&gt;

&lt;p&gt;So let's take a look at what's out there, and what really works.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI-native platforms&lt;/strong&gt; (Replit, Lovable, Bolt) are great for prototyping but hit a ceiling as complexity grows. Code is coupled to their infra, and it quickly becomes expensive and difficult to maintain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI coding tools&lt;/strong&gt; (Claude Code, Cursor, Codex) give you great code and full control, but they need the right foundation and you'll need some fundamental understanding of the underlying tools to work well with them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The winning combo:&lt;/strong&gt; Claude Code paired with a well-structured SaaS boilerplate like Open SaaS is the best way to vibe code a SaaS in 2026, giving you coherent code generation, along with better control as your app grows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two key techniques&lt;/strong&gt; for effective vibe coding: (1) LLM-friendly docs (llms.txt and beyond), (2) full-stack debugging visibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Vibe Coding Landscape in 2026
&lt;/h2&gt;

&lt;p&gt;AI-assisted coding tools come in different flavors, and understanding their differences is key to picking the right approach.&lt;/p&gt;

&lt;p&gt;In the table below, we quickly compare the two approaches. In the sections below that, we go into more detail about each approach.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;AI-Native Platforms&lt;/th&gt;
&lt;th&gt;AI Coding Tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Examples&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Replit, Lovable, Bolt.new&lt;/td&gt;
&lt;td&gt;Claude Code, Cursor, Codex&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Setup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zero-config, browser-based&lt;/td&gt;
&lt;td&gt;Local install, terminal/code-focused&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Quick prototypes and demos&lt;/td&gt;
&lt;td&gt;Production apps and SaaS businesses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Code control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited — AI makes structural decisions&lt;/td&gt;
&lt;td&gt;Full — you own and control everything&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vendor lock-in&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High — coupled to platform infra&lt;/td&gt;
&lt;td&gt;None — works with any stack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scalability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scalability degrades as complexity grows&lt;/td&gt;
&lt;td&gt;Scales with your codebase. No limitations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Platform-hosted (limited options)&lt;/td&gt;
&lt;td&gt;Deploy anywhere (Railway, Fly.io, VPS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost at scale&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Monthly fee + additional costs for debugging, storage, hosting, etc.&lt;/td&gt;
&lt;td&gt;Cheaper — monthly fee + choose your favorite hosting solution&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  AI-Native Platforms
&lt;/h3&gt;

&lt;p&gt;Tools like Replit Agent, Lovable, Bolt.new, and v0  aim for a "zero-config", purer "vibe coding" approach, where you describe what you want and get a working app. They aim to remove setup, config, and having to touch the code and/or terminal as much as possible. They're impressive for demos and fast prototyping.&lt;/p&gt;

&lt;p&gt;The catch here is that most of these apps are then locked-in to their hosting, auth, and storage solutions. This isn't always bad, but things can easily get complicated and expensive as your app grows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The "70% problem"&lt;/strong&gt;: these tools get you roughly 70% of the way to a working product. The last 30% — auth hardening, error handling, performance, deployment config — &lt;a href="https://blog.codeitbro.com/bolt-new-review/" rel="noopener noreferrer"&gt;requires significant manual effort&lt;/a&gt;. One estimate puts the cost of making Bolt.new output production-ready at &lt;a href="https://trickle.so/blog/bolt-new-review" rel="noopener noreferrer"&gt;$5,000-$20,000&lt;/a&gt; in professional dev work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure coupling&lt;/strong&gt;: the code you export is tightly coupled to a specific service stack. Lovable, for example, generates code &lt;a href="https://www.ml6.eu/en/blog/the-anatomy-of-a-lovable-app-and-its-boundaries-in-enterprise-software" rel="noopener noreferrer"&gt;deeply wired into Supabase&lt;/a&gt;, a separate service for auth, storage, realtime, edge functions, etc. Leaving Lovable/Supabase means rewriting all of those integrations. Replit similarly relies on its default &lt;a href="https://docs.replit.com/replit-workspace/replit-auth" rel="noopener noreferrer"&gt;Auth&lt;/a&gt;, &lt;a href="https://docs.replit.com/cloud-services/storage-and-databases/object-storage" rel="noopener noreferrer"&gt;Storage&lt;/a&gt;, and &lt;a href="https://docs.replit.com/cloud-services/storage-and-databases/sql-database" rel="noopener noreferrer"&gt;database options&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code quality degrades at scale&lt;/strong&gt;: Bolt.new projects with 15-20+ components experience &lt;a href="https://www.p0stman.com/guides/bolt-limitations/" rel="noopener noreferrer"&gt;severe AI context degradation&lt;/a&gt; — duplicated code, forgotten patterns, and inconsistencies. Replit Agent has been flagged for generating &lt;a href="https://www.dronahq.com/replit-ai-review/" rel="noopener noreferrer"&gt;"non-idiomatic or messy" code&lt;/a&gt; that becomes harder to maintain as projects grow. Multiple developers report spending &lt;a href="https://www.trustpilot.com/review/bolt.new" rel="noopener noreferrer"&gt;$1,000+ in tokens&lt;/a&gt; just debugging AI-generated bugs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limited architectural control&lt;/strong&gt;: the AI makes structural decisions for you, and those decisions compound. Data models get rigid, logic gets tightly coupled, and by the time you want to refactor, you're looking at a near-rewrite anyway.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the end, the most common feedback from users of these tools is that they allow you to move fast and to easily build initial prototypes, but &lt;a href="https://www.reddit.com/r/replit/comments/1rlndcc/once_your_mvp_is_working_in_lovablev0replit_do/" rel="noopener noreferrer"&gt;maintainence and upgrades quickly become complex and expensive&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To solve this, working on code locally, instead of a platform, is the first step.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Coding Tools
&lt;/h3&gt;

&lt;p&gt;Tools like Claude Code, Cursor, GitHub Copilot, and Codex work directly with your local files, and are better at generating production-ready code that you control.&lt;/p&gt;

&lt;p&gt;The pros here are: full control, no lock-in, works with any stack, and the added bonus is that it will be cheaper. You can version it, test it, deploy it anywhere, and switch tools whenever you want.&lt;/p&gt;

&lt;p&gt;But &lt;strong&gt;these tools require a bit more work&lt;/strong&gt; to get the most out of them. You'll have to be comfortable using the terminal, install a few more underlying tools, and its good to have a general understanding of the fundamentals when working with them. But, luckily, these tools can help you each step of the way, and if you set things up right (which we will show you how to do in this article) you can go all the way with them.&lt;/p&gt;

&lt;p&gt;In comparison to the AI-native platforms, if you're serious about building something substantial &lt;a href="https://www.reddit.com/answers/727395fa-476c-4817-895b-cf1c5937ec83/?q=pros+and+cons+of+claude+code&amp;amp;source=ANSWERS" rel="noopener noreferrer"&gt;these tools give better results at cheaper prices&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We'll use Claude Code as the driving example throughout this post, but the same principles apply to Cursor, Codex, and others.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Winning Combo: Claude Code + SaaS Boilerplate
&lt;/h3&gt;

&lt;p&gt;Most of the tedious parts of building a SaaS are routine, boilerplate tasks like setting up authentication, payments, email sending, file uploads, admin dashboard, etc. These are the things that are time-consuming to set up, aren't very creative or interesting, but are 100% necessary for a functional SaaS.&lt;/p&gt;

&lt;p&gt;Luckily, tons of SaaS boilerplate starter kits exist, giving you a solid foundation to build your SaaS on top of. They provide all the necessary integrations, plumbing, and glue code, along with some nice extras, so you can just focus on building the fun part of your app.&lt;/p&gt;

&lt;p&gt;A well-structured boilerplate has some key benefits: it allows you to start working on the actual business logic of your SaaS from day one. It also gives the AI patterns, structure, and conventions to follow, making it easier for tools like Claude Code to generate clean, consistent code. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;It's like giving a skilled carpenter a well-organized workshop instead of an empty shed. The tools are there, the materials are laid out, and there's a clear plan to follow.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You keep the full control, but you skip the part where you (or your AI) have to make a hundred decisions about project structure, auth patterns, payment integration, and deployment config. That's all solved for you already by the starter kit.&lt;/p&gt;

&lt;p&gt;But, because so many boilerplate starters exist, choosing the right one can be a pain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing Your SaaS Boilerplate
&lt;/h2&gt;

&lt;p&gt;There's no shortage of SaaS boilerplates out there. The real question isn't just "which one has the best features?", it's which one sets you (and your AI coding tool) up for long-term success. A few factors matter more than you'd think: cost, deployment flexibility, community support, and how well the codebase structure plays with AI.&lt;/p&gt;

&lt;p&gt;In the table below, we quickly compare some popular, battle-tested starters. In the sections below that, we go into more detail about each of them.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Paid Boilerplates (ShipFast, Supastarter)&lt;/th&gt;
&lt;th&gt;Open SaaS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$250-$800+&lt;/td&gt;
&lt;td&gt;Free, open-source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Third-party providers (Clerk, Supabase auth, Better Auth)&lt;/td&gt;
&lt;td&gt;Built-in (email/password, Google, GitHub, Microsoft, Slack, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Payments&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stripe, Lemon Squeezy, or Polar.sh, etc.&lt;/td&gt;
&lt;td&gt;Stripe, Lemon Squeezy, or Polar.sh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vercel + Supabase (typically)&lt;/td&gt;
&lt;td&gt;Railway, Fly.io, or any VPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Community&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1-2 maintainers&lt;/td&gt;
&lt;td&gt;13,000+ GitHub stars, active open-source community&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LLM-friendly docs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;llms.txt&lt;/td&gt;
&lt;td&gt;llms.txt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Codebase structure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multiple apps/packages with separate configs and third-party integrations wired together&lt;/td&gt;
&lt;td&gt;Single app, feature-based organization with fullstack code colocated&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Paid Boilerplates
&lt;/h3&gt;

&lt;p&gt;Options like &lt;a href="https://shipfa.st/" rel="noopener noreferrer"&gt;ShipFast&lt;/a&gt; ($250) and &lt;a href="https://supastarter.dev/" rel="noopener noreferrer"&gt;Supastarter&lt;/a&gt; (starting at $299) are popular choices. They're packed with lots of features and have a strong history of adoption and support.&lt;/p&gt;

&lt;p&gt;But there are a few things to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Upfront cost&lt;/strong&gt;: $250-$800+ before you've written a line of business logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vendor-leaning stacks&lt;/strong&gt;: many are built on top of Vercel + Supabase + third-party auth services. That's more vendor lock-in and recurring hosting costs on top of the purchase price. You're not just paying for the boilerplate, but you're also committing to a specific infrastructure stack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Quality&lt;/strong&gt;: most paid boilerplates are maintained by a one or two developers. An open-source project, on the other hand, is maintained by many more people, and the community input is much larger, making it more robust and reliable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stack fragmentation&lt;/strong&gt;: ShipFast is a flat Next.js app where auth, payments, email, and database are each handled by separate third-party libraries you wire together yourself. Supastarter is a Turborepo monorepo with 4 separate Next.js apps and 8+ shared packages, each with its own config. Both approaches mean more files for an AI tool to navigate, more indirection to follow, and more context needed to make a single cross-cutting change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this means paid boilerplates are bad. They can absolutely save you time. But it's worth understanding what you're signing up for beyond the purchase price.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open SaaS -- a free, open-source, production-ready SaaS boilerplate starter
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://opensaas.sh" rel="noopener noreferrer"&gt;Open SaaS&lt;/a&gt; is free, and open-source. It's powered by &lt;a href="https://wasp.sh" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt; — a batteries-included full-stack framework for React, Node.js, and Prisma apps.&lt;/p&gt;

&lt;p&gt;Here's what you get out of the box:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auth&lt;/strong&gt;: email/password, Google, GitHub, all pre-configured and without third-party providers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments&lt;/strong&gt;: Stripe, Lemon Squeezy, or Polar.sh. Take your pick.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email, file uploads, admin dashboard, analytics, e2e tests&lt;/strong&gt;: the full SaaS toolkit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy anywhere&lt;/strong&gt;: Railway, Fly.io, or any VPS. No vendor lock-in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;13,000+ GitHub stars&lt;/strong&gt; and an active open-source community backing it.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-quote"&gt;
  &lt;div class="ltag-quote__body"&gt;
    &lt;div class="ltag-quote__mark ltag-quote__mark--start"&gt;
      
        
      
    &lt;/div&gt;
    &lt;div class="ltag-quote__text"&gt;The documentation is a million times better for Open SaaS than for ShipFast... I got frustrated with ShipFast's terrible code and terrible documentation (or just the lack of) and I found Open SaaS. It's looking like it will be a better experience.&lt;/div&gt;
    &lt;div class="ltag-quote__mark ltag-quote__mark--end"&gt;
      
        
      
    &lt;/div&gt;
  &lt;/div&gt;
    &lt;div class="ltag-quote__rating"&gt;
        &lt;span class="ltag-quote__star ltag-quote__star--filled"&gt;★&lt;/span&gt;
        &lt;span class="ltag-quote__star ltag-quote__star--filled"&gt;★&lt;/span&gt;
        &lt;span class="ltag-quote__star ltag-quote__star--filled"&gt;★&lt;/span&gt;
        &lt;span class="ltag-quote__star ltag-quote__star--filled"&gt;★&lt;/span&gt;
        &lt;span class="ltag-quote__star ltag-quote__star--filled"&gt;★&lt;/span&gt;
    &lt;/div&gt;
  
  
    &lt;div class="ltag-quote__author-info"&gt;
        &lt;img class="ltag-quote__avatar" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fprofile_images%2F1787873578584793088%2FYo1wWG_p_400x400.jpg" alt="Sean Nam"&gt;
      &lt;div class="ltag-quote__meta"&gt;
        &lt;span class="ltag-quote__author"&gt;Sean Nam&lt;/span&gt;
          &lt;span class="ltag-quote__role"&gt;Founder @ NotePulse&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  
&lt;/div&gt;


&lt;p&gt;Because Open SaaS is built on &lt;a href="https://wasp.sh/docs" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt;, everything lives under one roof. React frontend, Node.js backend, and Prisma database layer are all managed by a single framework, with a declarative config (&lt;code&gt;main.wasp&lt;/code&gt; or &lt;code&gt;main.wasp.ts&lt;/code&gt;) that defines your routes, pages, operations, auth, and background jobs. The codebase is organized by feature (e.g. auth, payments, file uploads) with backend logic and frontend components sitting side by side. When an AI coding tool reads &lt;code&gt;main.wasp&lt;/code&gt;, it immediately understands the full app structure without having to jump between separate apps, packages, or third-party service abstractions. One framework, one config, one mental model for the AI to follow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Effectively Vibe Coding Your SaaS
&lt;/h2&gt;

&lt;p&gt;So we've got our AI-assisted coding tool and our SaaS boilerplate starter, but to get the most out of AI-assisted development, you need two more things working together. Note that these tips come from real-world experience building full-stack apps with Claude Code and Wasp, and we covered them in depth &lt;a href="https://wasp.sh/blog/2026/01/29/claude-code-fullstack-development-essentials" rel="noopener noreferrer"&gt;on the Wasp blog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. LLM-Friendly Documentation
&lt;/h3&gt;

&lt;p&gt;LLMs don't always get things right, and may sometimes be out-of-date with the latest features of the tools you're using. For example, if you're using a framework that shipped a new version last week, your AI tool probably doesn't know about it, unless you give it the docs.&lt;/p&gt;

&lt;p&gt;But how you give it docs matters a lot, because LLMs don't have a long-term memory, rather they have context windows, which is like a limited memory of only the most recent conversations. So with each new session, you have to remind them of what you're working on, with, and what you want to do.&lt;/p&gt;

&lt;p&gt;One of the best solutions is to use &lt;code&gt;llms.txt&lt;/code&gt; files. These are structured docs in a single, machine-readable plain text file that's purpose-built for LLMs.&lt;/p&gt;

&lt;p&gt;Open SaaS and Wasp both provide these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open SaaS docs&lt;/strong&gt;: &lt;a href="https://docs.opensaas.sh/llms.txt" rel="noopener noreferrer"&gt;&lt;code&gt;https://docs.opensaas.sh/llms.txt&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wasp framework docs&lt;/strong&gt;: &lt;a href="https://wasp.sh/llms.txt" rel="noopener noreferrer"&gt;&lt;code&gt;https://wasp.sh/llms.txt&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just add these URLs to your AI coding tool's chat session or "memory" (e.g. &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;). When the AI needs to, for example, understand how Wasp auth works or how to set up Stripe payments in Open SaaS, it has the full, up-to-date docs right there. &lt;/p&gt;

&lt;p&gt;And it's not just Open SaaS and Wasp. Most developer tools and integrations have adopted the &lt;code&gt;llms.txt&lt;/code&gt; standard. Try appending &lt;code&gt;/llms.txt&lt;/code&gt; to any tool's docs URL and see what comes back. You'd be surprised how many services already support it. When you're implementing a new integration, pass its &lt;code&gt;llms.txt&lt;/code&gt; to your coding agent so it has good guardrails for development.&lt;/p&gt;

&lt;p&gt;Another pro tip: when you're working on a specific feature, search the tool's docs for the relevant guide and look for a &lt;strong&gt;"Copy for LLMs"&lt;/strong&gt; button. Many doc sites now offer this. Or just try adding &lt;code&gt;.md&lt;/code&gt; to the end of a specific URL to get an LLM-friendly version of that page. For example, Stripe's guide on SaaS subscriptions is available at &lt;a href="https://docs.stripe.com/get-started/use-cases/saas-subscriptions.md" rel="noopener noreferrer"&gt;https://docs.stripe.com/get-started/use-cases/saas-subscriptions.md&lt;/a&gt;. Pass that to your agent and it'll have the knowledge it needs to implement Stripe subscriptions correctly.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Full-Stack Debugging Visibility
&lt;/h3&gt;

&lt;p&gt;AI can write code all day, but if it can't tell whether the code actually works, you're constantly stuck in the middle, running the app, checking the browser, copying error messages back and forth.&lt;/p&gt;

&lt;p&gt;The fix is giving your AI tool full-stack visibility into what's happening when the code runs, so it can see the errors, and fix them without you having to always intervene.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Background dev server&lt;/strong&gt;: Run your dev server as a background task so the AI can see server logs, compilation errors, and runtime exceptions in real time. In Claude Code, you can use background tasks (Ctrl+B) to keep &lt;code&gt;wasp start&lt;/code&gt; running while you work, or just tell it to "start the dev server as a background task".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser automation&lt;/strong&gt;: Tools like &lt;a href="https://github.com/ChromeDevTools/chrome-devtools-mcp" rel="noopener noreferrer"&gt;Chrome DevTools MCP&lt;/a&gt; or &lt;a href="https://github.com/vercel-labs/agent-browser" rel="noopener noreferrer"&gt;Vercel's agent browser&lt;/a&gt; let AI see what's actually rendering in the browser -- console errors, network requests, DOM state -- without you having to screenshot anything. The AI can verify that the button it just added actually appears on the page and handles clicks correctly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, these create a tight feedback loop: AI writes code → sees the result → spots the error → fixes it → verifies the fix. This improves the quality of the code it generates, and makes the entire process less tedious and more efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started: From Zero to Vibe Coding
&lt;/h2&gt;

&lt;p&gt;Ready to try it? Here's how to go from nothing to vibe coding a SaaS in a few minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install Wasp and Get the Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; @wasp.sh/wasp-cli
wasp new my-saas &lt;span class="nt"&gt;-t&lt;/span&gt; saas
&lt;span class="nb"&gt;cd &lt;/span&gt;my-saas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This scaffolds a new Open SaaS project with auth, payments, email, file uploads, an admin dashboard, a landing page, and more — all pre-configured and ready to go.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Set Up Claude Code with the Wasp Plugin
&lt;/h3&gt;

&lt;p&gt;After &lt;a href="https://code.claude.com/docs/en/quickstart" rel="noopener noreferrer"&gt;installing Claude Code&lt;/a&gt;, add &lt;a href="https://github.com/wasp-lang/wasp-agent-plugins/tree/main/plugins/wasp" rel="noopener noreferrer"&gt;the Wasp plugin&lt;/a&gt; so that it has deep knowledge of the framework, as well as skills and instructions on how to properly use full-stack debugging visibility, llms.txt docs, and more:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude plugin marketplace add wasp-lang/wasp-agent-plugins
claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;wasp@wasp-agent-plugins &lt;span class="nt"&gt;--scope&lt;/span&gt; project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;NOTE: Other coding agents&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're using a coding agent like Codex, OpenCode, Cursor, etc. you can get the same set of agent skills by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add wasp-lang/wasp-agent-plugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, in a new session, run the plugin initialization skill command to initialize the plugin with Wasp best practices for your project:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Get Integrations Working (Stripe, Email Sender, OpenAI, etc)
&lt;/h3&gt;

&lt;p&gt;Next, you'll want to get your payment, email sender, and other integrations working (Stripe, Email Sender, OpenAI, etc) before you start building features.&lt;/p&gt;

&lt;p&gt;Luckily for you, we've got a complete walkthrough video that guides you step-by-step through creating accounts, adding your API keys, and getting each integration working:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/lFGtwbwt66k"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Or if you want your agent to help guide you through the process, you can ask it to fetch the "getting started" guide from the &lt;a href="https://docs.opensaas.sh/llms.txt" rel="noopener noreferrer"&gt;Open SaaS LLMs.txt docs&lt;/a&gt; and follow the instructions step-by-step.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Start Building
&lt;/h3&gt;

&lt;p&gt;Fire up your database and dev server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wasp start db
wasp start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or just tell Claude Code to run &lt;code&gt;start the dev server as a background task&lt;/code&gt; and it will run the correct commands for you :)&lt;/p&gt;

&lt;p&gt;Now it's finally time to give Claude Code a real feature request — "add a user settings page where users can update their profile" — and watch it reference the Wasp config file(s) to understand your app's structure, reference the right patterns from the boilerplate, and implement the feature correctly.&lt;/p&gt;

&lt;p&gt;Because Wasp is opinionated, Claude won't have to guess where to put files, how to wire up routes, or which patterns to follow. It reads the config file(s), sees the existing conventions, and follows them. You get consistent, working code on the first try — or pretty close to it.&lt;/p&gt;

&lt;p&gt;Remember, if you're using Cursor, Copilot, or another tool, the same principles apply. Check out our &lt;a href="https://dev.to/guides/vibe-coding/"&gt;Vibe Coding guide&lt;/a&gt; more info.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What's the difference between AI-native platforms and AI coding tools?
&lt;/h3&gt;

&lt;p&gt;AI-native platforms like Replit, Lovable, and Bolt.new aim for a zero-config experience where you describe what you want and get a working app. AI coding tools like Claude Code, Cursor, and Codex work directly with your codebase, giving you full control and no vendor lock-in. AI-native platforms are great for quick prototypes but hit a ceiling as complexity grows, while AI coding tools require more setup but produce more maintainable, production-ready code, and can actually be cheaper in the long run.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I export my code from Replit, Lovable, or Bolt.new?
&lt;/h3&gt;

&lt;p&gt;Yes, all three platforms let you export your code via GitHub sync or ZIP download. However, the exported code is often tightly coupled to their infrastructure — for example, Lovable generates code wired into Supabase, and Replit uses proprietary auth, storage, and database solutions. This means significant refactoring is needed if you want to deploy elsewhere or switch services.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is llms.txt and why does it matter for vibe coding?
&lt;/h3&gt;

&lt;p&gt;llms.txt is a structured documentation file in plain text format, purpose-built for LLMs. It gives AI coding tools like Claude Code up-to-date knowledge about the frameworks and tools you're using, reducing hallucinations and outdated code suggestions. Most developer tools now support it -- just append /llms.txt to any tool's docs URL to check.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the best free SaaS boilerplate starter for AI-assisted development?
&lt;/h3&gt;

&lt;p&gt;Open SaaS is a free, open-source SaaS boilerplate for React, Node.js, and Prisma apps powered by the Wasp framework. It comes with auth, payments (Stripe, Lemon Squeezy, or Polar.sh), email sending, file uploads, an admin dashboard, and more, all pre-configured. Because it's built on Wasp, the entire stack is managed by a single framework with a declarative config file. The codebase is organized by feature with backend and frontend code colocated, so AI tools can understand the full app structure from one file instead of navigating multiple apps, packages, and third-party integrations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does codebase structure matter for AI-assisted development?
&lt;/h3&gt;

&lt;p&gt;Yes, significantly. AI coding tools work best when they can quickly understand the full picture of your app. A codebase organized by feature with colocated fullstack code — like Open SaaS, where backend logic and frontend components sit side by side — gives the AI one clear mental model to follow. In contrast, boilerplates that split code across multiple apps, packages, and third-party integrations require the AI to navigate more files and follow more indirection, which increases the chance of inconsistencies and errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I set up Claude Code for full-stack SaaS development?",
&lt;/h3&gt;

&lt;p&gt;Install Claude Code, then add the Wasp plugin for deep framework knowledge. Create a new Open SaaS project with 'wasp new my-saas -t saas', set up your integrations (Stripe, email, etc.), and run 'wasp start' as a background task so Claude Code can see server logs and errors in real time. Pair this with browser automation tools like Chrome DevTools MCP for full-stack debugging visibility."&lt;/p&gt;

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

&lt;p&gt;The best way to vibe code a SaaS in 2026 isn't about finding the flashiest AI tool, it's about giving your AI tool the right foundation to work with.&lt;/p&gt;

&lt;p&gt;We suggest using Claude Code and giving it three things: a strong SaaS boilerplate starter kit, like Open SaaS, that gives AI a solid foundation to work with, LLM-friendly docs that help AI stay grounded without burning context, and full-stack debugging visibility that closes the feedback loop.&lt;/p&gt;

&lt;p&gt;Open SaaS + Claude Code gives you all of this: a free, open-source, production-ready SaaS foundation, the structure and conventions AI needs to generate clean, consistent code, complete LLM-friendly docs for both the template and the framework, and the tools for full-stack debugging visibility. And because it's all free and open source there's no upfront cost, no vendor lock-in, and you can deploy wherever you want.&lt;/p&gt;

&lt;p&gt;You spend your time on business logic and product, not the boring stuff.&lt;/p&gt;



</description>
      <category>webdev</category>
      <category>sass</category>
      <category>ai</category>
      <category>tooling</category>
    </item>
    <item>
      <title>What Are the Best Full-stack Web App Frameworks in 2026?</title>
      <dc:creator>vincanger</dc:creator>
      <pubDate>Mon, 02 Mar 2026 16:00:27 +0000</pubDate>
      <link>https://forem.com/wasp/what-are-the-best-full-stack-web-app-frameworks-in-2026-3d9m</link>
      <guid>https://forem.com/wasp/what-are-the-best-full-stack-web-app-frameworks-in-2026-3d9m</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://laravel.com/" rel="noopener noreferrer"&gt;Laravel&lt;/a&gt;, &lt;a href="https://rubyonrails.org/" rel="noopener noreferrer"&gt;Rails&lt;/a&gt;, and &lt;a href="https://www.djangoproject.com/" rel="noopener noreferrer"&gt;Django&lt;/a&gt; remain the most battle-tested full-stack frameworks in 2026.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; dominates for React-first apps but requires significant assembly. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://wasp.sh/" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt; brings the batteries-included experience of Laravel/Rails to the JS/TS ecosystem, with the strongest AI-coding compatibility of the five. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want &lt;strong&gt;proven maturity&lt;/strong&gt;, go Laravel for PHP or Django for Python.&lt;br&gt;&lt;br&gt;
If you want to &lt;strong&gt;maximum flexibility&lt;/strong&gt; and don't mind the extra work, go with Next.js.&lt;br&gt;&lt;br&gt;
If you want to &lt;strong&gt;ship fast in JavaScript with minimal boilerplate&lt;/strong&gt;, go with Wasp.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We're Comparing
&lt;/h2&gt;

&lt;p&gt;In this guide, we compare the most popular full-stack frameworks in 2026: &lt;strong&gt;Laravel&lt;/strong&gt;, &lt;strong&gt;Ruby on Rails&lt;/strong&gt;, &lt;strong&gt;Django&lt;/strong&gt;, and &lt;strong&gt;Next.js&lt;/strong&gt;. We also include &lt;strong&gt;Wasp&lt;/strong&gt;, the framework we're building. We think it's a compelling option in this space, and we wanted to put it side by side with the established players so you can judge for yourself. &lt;/p&gt;

&lt;p&gt;We look at what each does well, where each falls short, and which one fits your use case, whether you're a solo indie hacker, a startup team, or an enterprise engineering org.&lt;/p&gt;

&lt;p&gt;Beyond the usual criteria like developer experience and ecosystem size, we also evaluate how well each framework plays with AI coding tools like Cursor, Claude Code, Codex, Copilot, and OpenCode — because in 2026, that matters more than ever.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Makes a Great Full-Stack Framework in 2026?
&lt;/h2&gt;

&lt;p&gt;We focused on five criteria when evaluating full-stack frameworks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Developer Experience (DX):&lt;/strong&gt; How fast can you go from &lt;code&gt;init&lt;/code&gt; to a deployed app? How much configuration and boilerplate do you (not) have to deal with?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ecosystem &amp;amp; Community:&lt;/strong&gt; Are there libraries, plugins, and guides for when you get stuck? Is it being actively maintained?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-Friendliness:&lt;/strong&gt; How well does the framework work with AI coding assistants? Can an LLM understand your project structure and generate correct code?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Ease:&lt;/strong&gt; Can you deploy with a single command, or do you need to configure infrastructure manually?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-Stack Coverage:&lt;/strong&gt; Does the framework cover the client, server, &lt;em&gt;and&lt;/em&gt; database layer, and how much assembly is required?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Different Flavors of Full-Stack
&lt;/h2&gt;

&lt;p&gt;All five frameworks in this guide can be used for full-stack development, but they take different approaches:&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend-first full-stack (Laravel, Rails, Django)
&lt;/h3&gt;

&lt;p&gt;These are the original full-stack frameworks. They own the server and database layer with built-in ORMs, migrations, auth, background jobs, and more. Their frontend story varies, e.g. Laravel pairs with Inertia.js or Livewire, Rails has Hotwire/Turbo, and Django uses templates or a separate SPA. These are mature, battle-tested, and genuinely full-stack. If your definition of full-stack is "handles everything from HTTP request to database and back," these frameworks nailed it years ago.&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend-first full-stack (Next.js)
&lt;/h3&gt;

&lt;p&gt;Covers client-side rendering and server-side logic (API routes, server components), but the database layer is entirely Bring Your Own (BYO). You choose your ORM, your auth solution, your email provider, and you wire them together yourself.&lt;/p&gt;

&lt;h3&gt;
  
  
  All-in-one full-stack (Wasp)
&lt;/h3&gt;

&lt;p&gt;Wasp takes a different approach within the JavaScript ecosystem specifically. It uses a declarative configuration file that describes your routes, authentication, database models, server operations, and more in one place. The compiler then generates a React + Node.js + Prisma application. Unlike Laravel or Rails, Wasp removes the need to pick and assemble frontend solutions, and bundles everything within a single mental model. Wasp also brings the batteries-included philosophy of Laravel and Rails to the JS/TS ecosystem, where developers otherwise need to assemble everything from scratch.&lt;/p&gt;




&lt;h2&gt;
  
  
  Laravel (PHP)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The battle-tested PHP powerhouse that keeps reinventing itself.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Laravel has been the dominant PHP framework for over a decade, and it shows no signs of slowing down. Laravel has a long tradition of incremental, developer-friendly improvements. With over &lt;a href="https://github.com/laravel/laravel" rel="noopener noreferrer"&gt;&lt;strong&gt;80,000 GitHub stars&lt;/strong&gt;&lt;/a&gt; and &lt;a href="https://blog.jetbrains.com/phpstorm/2024/09/laravel-trends-2024-the-latest-market-insights/" rel="noopener noreferrer"&gt;used by 61% of PHP developers&lt;/a&gt;, Laravel's community is massive and active.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Eloquent ORM&lt;/strong&gt; — expressive, ActiveRecord-style database layer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New Starter Kits (React, Vue, Livewire)&lt;/strong&gt; — built-in auth scaffolding for email with optional WorkOS AuthKit for social auth, passkeys, and SSO&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Laravel Cloud, or Forge&lt;/strong&gt; — fully-managed deployments with Laravel Cloud, or VPS server management with Forge&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inertia.js integration&lt;/strong&gt; — use React or Vue as your frontend with server-driven routing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Queues, events, broadcasting&lt;/strong&gt; — built-in job processing and real-time features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Laravel Herd&lt;/strong&gt; — zero-config local development environment&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Incredibly mature ecosystem with solutions for nearly every problem&lt;/li&gt;
&lt;li&gt;Excellent documentation — often cited as the gold standard&lt;/li&gt;
&lt;li&gt;Huge job market, especially for agencies and SaaS companies&lt;/li&gt;
&lt;li&gt;First-party tools for deployment, billing (Cashier), search (Scout), and more&lt;/li&gt;
&lt;li&gt;Active release cycle with yearly major versions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;PHP — love it or hate it, many JS/Python developers won't consider it&lt;/li&gt;
&lt;li&gt;Frontend story requires extra setup (Inertia.js, Livewire, or a separate SPA)&lt;/li&gt;
&lt;li&gt;Performance requires tuning for high-concurrency applications&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;p&gt;Enterprise applications, SaaS products, agencies, and teams already invested in PHP. Laravel is the safest bet if you need a proven framework with an answer for everything.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI/Vibe Coding Compatibility
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Good.&lt;/strong&gt; Laravel's consistent conventions and excellent documentation mean AI tools can generate reasonably accurate code. However, the PHP + JS split (if using Inertia or a React SPA) means the AI needs to understand two separate codebases. AI-coding tools work well with Laravel, but the full-stack context is split across languages.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ruby on Rails
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The original "convention over configuration" framework, still going strong.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ruby on Rails practically invented modern web development conventions. &lt;a href="https://rubyonrails.org/2024/12/13/Rails-Version-8-0-1-has-been-released" rel="noopener noreferrer"&gt;Rails 8.0&lt;/a&gt; (released late 2024) doubled down on simplicity with Kamal 2 for deployment, Thruster for HTTP/2, and the Solid trifecta (Solid Cable, Solid Cache, Solid Queue) — replacing Redis dependencies with database-backed alternatives. Rails has approximately &lt;a href="https://github.com/rails/rails" rel="noopener noreferrer"&gt;&lt;strong&gt;56,000+ GitHub stars&lt;/strong&gt;&lt;/a&gt; and a loyal, experienced community.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Active Record&lt;/strong&gt; — the ORM that inspired every other ORM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kamal 2&lt;/strong&gt; — deploy anywhere with zero-downtime Docker deployments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hotwire (Turbo + Stimulus)&lt;/strong&gt; — modern frontend interactivity without heavy JS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solid Cable/Cache/Queue&lt;/strong&gt; — database-backed infrastructure, no Redis needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in authentication generator&lt;/strong&gt; (new in Rails 8)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action Mailer, Active Job, Active Storage&lt;/strong&gt; — batteries included for email, jobs, and file uploads&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Convention over configuration means less decision fatigue&lt;/li&gt;
&lt;li&gt;Extremely productive for CRUD applications and MVPs&lt;/li&gt;
&lt;li&gt;Mature ecosystem with gems for nearly everything&lt;/li&gt;
&lt;li&gt;Rails 8's "no PaaS" philosophy makes self-hosting straightforward&lt;/li&gt;
&lt;li&gt;Strong opinions lead to consistent, maintainable codebases&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ruby's job market has shrunk compared to JS, Python, and PHP. &lt;a href="https://blog.jetbrains.com/research/2025/10/state-of-developer-ecosystem-2025/" rel="noopener noreferrer"&gt;JetBrains' 2025 survey&lt;/a&gt; classifies Ruby as a language in "long-term decline"&lt;/li&gt;
&lt;li&gt;Ruby has no opt-in type system akin to TypeScript — that's freeing for some developers and frustrating for others&lt;/li&gt;
&lt;li&gt;Performance can lag behind Node.js and Go for I/O-heavy workloads&lt;/li&gt;
&lt;li&gt;Frontend story (Hotwire) is polarizing — great for some, frustrating for React/Vue developers&lt;/li&gt;
&lt;li&gt;Smaller pool of new developers entering the ecosystem&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;p&gt;Startups that value speed-to-market, CRUD-heavy applications, and teams that appreciate strong conventions. Rails remains one of the fastest ways to go from idea to working product if you're comfortable with Ruby.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI/Vibe Coding Compatibility
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Good.&lt;/strong&gt; Rails' strong conventions make it relatively predictable for AI tools. The "Rails way" means there's usually one correct approach, which helps LLMs generate accurate code. However, like Laravel, the backend (Ruby) and any modern frontend (React via Inertia or API mode) are separate contexts the AI must juggle.&lt;/p&gt;




&lt;h2&gt;
  
  
  Django (Python)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Python's full-stack framework, now supercharged by the AI/ML ecosystem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.djangoproject.com/en/5.2/releases/5.2/" rel="noopener noreferrer"&gt;Django 5.2 LTS&lt;/a&gt; (released April 2025) is the latest long-term support release, with security fixes guaranteed through April 2028. With roughly &lt;a href="https://github.com/django/django" rel="noopener noreferrer"&gt;&lt;strong&gt;82,000+ GitHub stars&lt;/strong&gt;&lt;/a&gt;, Django has one of the largest open-source communities of any web framework. Its killer advantage in 2026? Python is the language of AI and data science, making Django a natural choice for teams that need web applications tightly integrated with ML pipelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Django ORM&lt;/strong&gt; — powerful, Pythonic database layer with migrations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Django Admin&lt;/strong&gt; — automatic admin interface from your models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Django REST Framework (DRF)&lt;/strong&gt; — the de facto standard for building APIs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in auth, sessions, CSRF protection&lt;/strong&gt; — security-first by default&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Excellent integration with Python ML/AI libraries&lt;/strong&gt; — NumPy, pandas, scikit-learn, PyTorch&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Python, &lt;a href="https://www.tiobe.com/tiobe-index/" rel="noopener noreferrer"&gt;the most popular programming language according to the TIOBE Index&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Unmatched for applications that combine web + data science/ML&lt;/li&gt;
&lt;li&gt;Django Admin alone saves weeks of development time&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.djangoproject.com/start/overview/" rel="noopener noreferrer"&gt;Battle-tested at scale&lt;/a&gt; (Instagram, Pinterest, Mozilla)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.djangoproject.com/en/dev/internals/release-process/" rel="noopener noreferrer"&gt;LTS releases&lt;/a&gt; provide long-term stability — 3 years of security fixes per LTS version, the longest of any framework in this list&lt;/li&gt;
&lt;li&gt;Massive community with extensive third-party packages&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Frontend story is the weakest of the five. Django templates are server-rendered, and pairing with React requires a separate SPA + DRF API&lt;/li&gt;
&lt;li&gt;Async support is improving but still not as natural as Node.js&lt;/li&gt;
&lt;li&gt;"Monolithic" architecture can feel heavy for small projects&lt;/li&gt;
&lt;li&gt;Deployment requires more setup than modern deployment platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;p&gt;Data-driven applications, ML-integrated products, and teams already writing Python. If your backend does heavy data processing or integrates with AI models, Django is a natural fit. Also excellent for government, education, and enterprise contexts where Python is standard.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI/Vibe Coding Compatibility
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Very good for backend, weaker for full-stack.&lt;/strong&gt; Python is the language AI tools understand best, so Django backend code gets excellent AI assistance. But the disconnect between Django's backend and a modern JS frontend means AI tools struggle with the full-stack picture. If you're building a Django + React app, the AI has to work across two very different codebases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Next.js (React)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The React meta-framework that dominates the JavaScript ecosystem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next.js pioneered server-side rendering in the React ecosystem and continues to push boundaries with React Server Components, Server Actions, and a serverless-first deployment model via Vercel. &lt;a href="https://nextjs.org/showcase" rel="noopener noreferrer"&gt;Used by companies like Netflix, TikTok, and Notion&lt;/a&gt;, it has over &lt;a href="https://github.com/vercel/next.js" rel="noopener noreferrer"&gt;&lt;strong&gt;130,000+ GitHub stars&lt;/strong&gt;&lt;/a&gt;, making it one of the most popular open-source frameworks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;App Router&lt;/strong&gt; — React Server Components, layouts, and streaming&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server Actions&lt;/strong&gt; — call server functions directly from client components&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turbopack&lt;/strong&gt; — Rust-based bundler for faster builds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Routes&lt;/strong&gt; — build backend endpoints alongside your frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vercel deployment&lt;/strong&gt; — git push to production in seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image optimization, fonts, metadata&lt;/strong&gt; — built-in performance features&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Largest ecosystem and community in the JavaScript full-stack space&lt;/li&gt;
&lt;li&gt;Vercel provides best-in-class deployment experience&lt;/li&gt;
&lt;li&gt;React skills are the most in-demand frontend skills in the job market&lt;/li&gt;
&lt;li&gt;Server Components and Server Actions blur the client/server boundary&lt;/li&gt;
&lt;li&gt;Excellent TypeScript support&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nextjs.org/support-policy" rel="noopener noreferrer"&gt;Formal LTS support policy&lt;/a&gt; — each major version gets up to 2 years of maintenance&lt;/li&gt;
&lt;li&gt;Massive library of examples, templates, and tutorials&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No built-in ORM, database layer, or auth — you need Prisma/Drizzle for DB, NextAuth/Clerk for auth, Resend for email, etc.&lt;/li&gt;
&lt;li&gt;Complexity has grown significantly — App Router, Server Components, caching strategies can be overwhelming&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://eduardoboucas.com/posts/2025-03-25-you-should-know-this-before-choosing-nextjs/" rel="noopener noreferrer"&gt;Vercel platform coupling&lt;/a&gt; — key features like ISR, image optimization, and serverless deployment work best (or only) on Vercel, with no official adapter system for other hosts&lt;/li&gt;
&lt;li&gt;Serverless-first billing model can lead to unpredictable costs at scale&lt;/li&gt;
&lt;li&gt;"Glue framework" problem — you spend significant time choosing and wiring together third-party solutions&lt;/li&gt;
&lt;li&gt;Frequent breaking changes like the migration from Pages to App Router, which effectively required rewriting large portions of existing apps&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;p&gt;Teams building React-first applications who want maximum flexibility. Next.js is the right choice when you need a highly customized frontend with complex UI, and you're comfortable assembling or connecting your own backend stack. It's the only framework in this list that works equally well as a pure frontend layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI/Vibe Coding Compatibility
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mixed.&lt;/strong&gt; AI tools are excellent at generating React components and Next.js page structures. But because Next.js doesn't prescribe a database, auth, or backend architecture, the AI has to understand whatever custom stack you've assembled and spend a lot more time writing boilerplate and glue code. The complexity of the App Router, Server Components, and caching — plus breaking changes like the Pages to App Router migration — can also make it harder for AI to get things right.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wasp (React + Node.js + Prisma)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A declarative full-stack JS framework that gives React + Node.js + Prisma the batteries-included treatment.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Wasp (Web Application Specification) takes a different approach within the JavaScript ecosystem. Instead of giving you building blocks and telling you to assemble them, Wasp uses a declarative configuration file that describes your entire application: routes, pages, authentication, database models, server operations, and background jobs. The Wasp compiler then generates a complete React + Node.js + Prisma application. With &lt;a href="https://github.com/wasp-lang/wasp" rel="noopener noreferrer"&gt;&lt;strong&gt;18,000+ GitHub stars&lt;/strong&gt;&lt;/a&gt; and a growing community, Wasp is earning attention as the opinionated alternative to the "assemble it yourself" JS ecosystem.&lt;/p&gt;

&lt;p&gt;This is our framework. We built Wasp because we felt the JS/TS ecosystem was missing the kind of batteries-included experience that Laravel, Rails, and Django developers have had for years. We think that earns it a spot in this comparison, but we'll let you be the judge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Declarative &lt;code&gt;.wasp&lt;/code&gt; or &lt;code&gt;.wasp.ts&lt;/code&gt; config&lt;/strong&gt; — define your entire app — routes, auth, database, jobs — from a high level&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-stack type safety&lt;/strong&gt; — types flow from database to UI automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type-safe RPC&lt;/strong&gt; — call server functions from the client with automatic serialization and type checking, no API layer to write&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in auth&lt;/strong&gt; — email/password, Google, GitHub, etc. with minimal config&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Background jobs&lt;/strong&gt; — declare async jobs in config, implement in Node.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One-command deployment&lt;/strong&gt; — &lt;code&gt;wasp deploy&lt;/code&gt; to Railway, &lt;a href="http://fly.io/" rel="noopener noreferrer"&gt;Fly.io&lt;/a&gt; or other providers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://opensaas.sh/" rel="noopener noreferrer"&gt;Open SaaS&lt;/a&gt;&lt;/strong&gt; — production-ready SaaS starter with &lt;a href="https://github.com/wasp-lang/open-saas" rel="noopener noreferrer"&gt;13,000+ GitHub stars&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dramatically less boilerplate than assembling Next.js + Prisma + NextAuth + etc. — which means a faster start and less maintenance later&lt;/li&gt;
&lt;li&gt;Wasp's config acts as a high-level map of your app that both you and AI coding tools can read to quickly understand the full picture&lt;/li&gt;
&lt;li&gt;Full-stack type safety without manual setup&lt;/li&gt;
&lt;li&gt;Built on React, Node.js, and Prisma — widely adopted, marketable technologies&lt;/li&gt;
&lt;li&gt;Simple by default, powerful when needed — common features work out of the box, but you can always drop into the underlying React, Node.js, and Prisma code for full flexibility&lt;/li&gt;
&lt;li&gt;No deployment lock-in — build artifacts are standard Node.js and React, deployable anywhere&lt;/li&gt;
&lt;li&gt;Helpful community with very active maintainers (according to the feedback of our users!)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Newer technology, which means faster changes and a still-growing ecosystem&lt;/li&gt;
&lt;li&gt;Not yet battle-tested at enterprise scale&lt;/li&gt;
&lt;li&gt;Currently only focused on the React + Node.js + Prisma stack&lt;/li&gt;
&lt;li&gt;No serverless deployment support (yet)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;p&gt;Solo developers, indie hackers, and startup teams who want a batteries-included full-stack experience in JavaScript/TypeScript. Also a strong fit for small-to-medium teams building SaaS products and enterprises building internal tools — anywhere speed-to-ship and low boilerplate matter more than maximum customization.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI/Vibe Coding Compatibility
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Excellent.&lt;/strong&gt; The Wasp configuration gives AI an instant, high-level understanding of your entire application, including its routes, authentication methods, server operations, and more. The well-defined stack and clear structure allow AI to focus on your app's business logic while Wasp handles the glue and boilerplate. And because complexity is hidden until you need it, there's simply less for AI to get wrong, making it easier to generate coherent code across the entire stack.&lt;/p&gt;




&lt;h2&gt;
  
  
  Built-in Features: What You Get Out of the Box
&lt;/h2&gt;

&lt;p&gt;One of the biggest differences between frameworks is how much they give you versus how much you assemble yourself. Here's a detailed comparison of key features across all five frameworks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Built-in Solution&lt;/th&gt;
&lt;th&gt;Setup Effort&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wasp&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Declarative auth in config — ~10 lines for email + social auth&lt;/td&gt;
&lt;td&gt;Minimal — declare it, done&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Laravel&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;New starter kits with email auth and optional WorkOS AuthKit for social auth, passkeys, SSO&lt;/td&gt;
&lt;td&gt;Low — one CLI command scaffolds views, controllers, routes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rails&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in auth generator (Rails 8+). &lt;code&gt;rails generate authentication&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Low — generates migration, model, controller, views&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Django&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;django.contrib.auth&lt;/code&gt; built into every project. Login/logout views, permissions, groups&lt;/td&gt;
&lt;td&gt;Low — included by default, add URLs and templates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Next.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None built-in. Use NextAuth.js/Auth.js (~50-100 lines config + route handler + middleware + provider setup) or Clerk (hosted, paid)&lt;/td&gt;
&lt;td&gt;Moderate-High — install package, configure providers, add middleware, handle sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Where the established frameworks win:&lt;/strong&gt; Laravel, Rails, and Django have had over a decade to refine their auth systems. They handle edge cases (password resets, email verification, rate limiting, 2FA) that newer solutions are still maturing on. Django's permission system and Laravel's team management are particularly sophisticated. That said, Wasp stands out for how little code is needed to get auth working: a few lines of config vs. generated scaffolding in the other frameworks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Background Jobs / Async Tasks
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Built-in Solution&lt;/th&gt;
&lt;th&gt;External Dependencies&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Laravel&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Laravel Queues — first-party, supports Redis, SQS, database drivers. Horizon for monitoring&lt;/td&gt;
&lt;td&gt;None required (database driver works out of the box)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rails&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Active Job — built-in abstraction. Solid Queue (Rails 8) eliminates Redis. Sidekiq for heavy workloads&lt;/td&gt;
&lt;td&gt;None with Solid Queue; Sidekiq needs Redis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Django&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None built-in. Celery is the de facto standard (~50-100 lines setup, needs broker like Redis/RabbitMQ)&lt;/td&gt;
&lt;td&gt;Celery + message broker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wasp&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Declare &lt;code&gt;job&lt;/code&gt; in &lt;code&gt;.wasp&lt;/code&gt; config (~5 lines), implement handler in Node.js&lt;/td&gt;
&lt;td&gt;None — uses pg-boss under-the-hood (PostgreSQL-backed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Next.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None built-in. Need Inngest, Trigger.dev, or BullMQ + separate worker process&lt;/td&gt;
&lt;td&gt;Third-party service or self-hosted worker&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Where Laravel, Rails, and Wasp dominate:&lt;/strong&gt; Laravel Queues and Rails' Active Job / Solid Queue are the gold standard for background processing. They support job chaining, rate limiting, retry logic, priority queues, and monitoring dashboards (Horizon, Solid Queue's admin). Wasp's job system is simpler to declare but less feature-rich for complex workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Routing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Next.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;File-based routing — create a file at &lt;code&gt;app/dashboard/page.tsx&lt;/code&gt; and the route exists. Intuitive but can get messy with complex layouts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Laravel&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;routes/web.php&lt;/code&gt; — expressive, resourceful routing. &lt;code&gt;Route::resource('photos', PhotoController::class)&lt;/code&gt; gives you 7 CRUD routes in one line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rails&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;config/routes.rb&lt;/code&gt; — similar to Laravel. &lt;code&gt;resources :photos&lt;/code&gt; generates RESTful routes. Mature, powerful DSL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Django&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;urlpatterns&lt;/code&gt; in &lt;code&gt;urls.py&lt;/code&gt; — explicit URL-to-view mapping. Flexible but more verbose than Rails/Laravel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wasp&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Declare &lt;code&gt;route&lt;/code&gt; + &lt;code&gt;page&lt;/code&gt; in &lt;code&gt;.wasp&lt;/code&gt; config — routes are paired with pages and get type-safe linking. Simpler but less flexible than Rails/Laravel&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Honest take:&lt;/strong&gt; Routing is largely a solved problem. Rails and Laravel have the most powerful routing DSLs. Next.js file-based routing is the most intuitive for simple apps. Wasp's routing is the most concise but also the least flexible for complex URL patterns.&lt;/p&gt;

&lt;h3&gt;
  
  
  Full-Stack Type Safety
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Type Safety Story&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wasp&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic — types flow from Prisma schema through server operations to React components. No manual setup needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Next.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Possible with tRPC or Server Actions, but requires manual configuration. Server Actions provide some type flow but aren't end-to-end&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Laravel&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited — PHP has types, but no automatic flow to JS frontend. Inertia.js provides some type sharing with TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rails&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Minimal — Ruby is dynamically typed. Sorbet exists but isn't standard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Django&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited — Python has type hints, but no automatic flow to JS frontend&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Wasp's genuine advantage:&lt;/strong&gt; This is one area where Wasp clearly leads. Having types flow automatically from your database schema to your UI components, with zero configuration, eliminates an entire class of bugs. In other frameworks, achieving this requires significant setup (tRPC in Next.js) or isn't practically possible (Rails, Django).&lt;/p&gt;




&lt;h2&gt;
  
  
  Head-to-Head Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Laravel&lt;/th&gt;
&lt;th&gt;Ruby on Rails&lt;/th&gt;
&lt;th&gt;Django&lt;/th&gt;
&lt;th&gt;Next.js&lt;/th&gt;
&lt;th&gt;Wasp&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PHP&lt;/td&gt;
&lt;td&gt;Ruby&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;JavaScript/TypeScript&lt;/td&gt;
&lt;td&gt;JavaScript/TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub Stars&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;83K+&lt;/td&gt;
&lt;td&gt;56K+&lt;/td&gt;
&lt;td&gt;82K+&lt;/td&gt;
&lt;td&gt;130K+&lt;/td&gt;
&lt;td&gt;18K+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ORM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Eloquent&lt;/td&gt;
&lt;td&gt;Active Record&lt;/td&gt;
&lt;td&gt;Django ORM&lt;/td&gt;
&lt;td&gt;BYO (Prisma/Drizzle)&lt;/td&gt;
&lt;td&gt;Prisma (integrated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Starter kits + WorkOS AuthKit integration&lt;/td&gt;
&lt;td&gt;Generator (Rails 8)&lt;/td&gt;
&lt;td&gt;django.contrib.auth&lt;/td&gt;
&lt;td&gt;BYO (NextAuth/Clerk)&lt;/td&gt;
&lt;td&gt;Declarative config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Background Jobs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Queues + Horizon&lt;/td&gt;
&lt;td&gt;Active Job + Solid Queue&lt;/td&gt;
&lt;td&gt;(Celery)&lt;/td&gt;
&lt;td&gt;BYO (Inngest/Trigger.dev)&lt;/td&gt;
&lt;td&gt;Declarative config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Modern React Frontend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Via Inertia.js&lt;/td&gt;
&lt;td&gt;Via Hotwire/API&lt;/td&gt;
&lt;td&gt;Via separate SPA&lt;/td&gt;
&lt;td&gt;Native React&lt;/td&gt;
&lt;td&gt;Native React&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Full-Stack Type Safety&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Manual (tRPC)&lt;/td&gt;
&lt;td&gt;Automatic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Easy Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Forge/Vapor&lt;/td&gt;
&lt;td&gt;Kamal 2&lt;/td&gt;
&lt;td&gt;Manual/PaaS&lt;/td&gt;
&lt;td&gt;Vercel (one-click)&lt;/td&gt;
&lt;td&gt;CLI deploy to Railway, Fly.io, or any VPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI-Friendliness&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning Curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Steep (App Router)&lt;/td&gt;
&lt;td&gt;Low-Moderate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Job Market&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Large (PHP)&lt;/td&gt;
&lt;td&gt;Shrinking&lt;/td&gt;
&lt;td&gt;Large (Python)&lt;/td&gt;
&lt;td&gt;Very Large (React)&lt;/td&gt;
&lt;td&gt;Indirectly Very Large (Wasp is React/Node.js/Prisma)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maturity / Enterprise Readiness&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  When should I choose Laravel vs Next.js vs Wasp?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Choose Laravel&lt;/strong&gt; if you or your team knows PHP, you need a battle-tested solution for a complex business application, and you want a massive ecosystem with answers for every problem. &lt;strong&gt;Choose Next.js&lt;/strong&gt; if you're designing a marketing page and SEO is very important, or if you need a highly custom React frontend with maximum flexibility and you're comfortable assembling your own backend stack. &lt;strong&gt;Choose Wasp&lt;/strong&gt; if you want a batteries-included JS/TS full-stack experience without the assembly tax for building and shipping fast.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the best framework for solo developers?
&lt;/h3&gt;

&lt;p&gt;It depends on your language. &lt;strong&gt;Wasp&lt;/strong&gt; is excellent for JS/TS solo developers. The declarative config eliminates decision fatigue and AI tools work particularly well with it. &lt;strong&gt;Rails&lt;/strong&gt; has been the solo developer's best friend for two decades and is still incredibly productive. &lt;strong&gt;Laravel&lt;/strong&gt; is similarly productive if you know PHP. The common thread: pick a framework with strong opinions so you spend time building, not configuring.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which framework is best for vibe coding / AI-assisted development?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Wasp's&lt;/strong&gt; configuration makes it the best choice as it gives AI a boilerplate-free, high-level understanding of the entire app, and allows it to focus on building your app's business logic while Wasp handles the glue. But Django also performs well because Python is the language AI tools understand most deeply, and Laravel/Rails benefit from their strong conventions that reduce ambiguity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Wasp production-ready?
&lt;/h3&gt;

&lt;p&gt;Yes, with caveats. Wasp is rapidly approaching a 1.0 release (currently in beta), which means API changes can occur between versions. However, real companies and indie hackers are running production applications built with Wasp. For enterprise-scale applications with complex requirements, you may want to wait for 1.0 or choose a more established framework. For startups, MVPs, and SaaS products, Wasp is production-viable.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the best framework for a startup MVP?
&lt;/h3&gt;

&lt;p&gt;For a &lt;strong&gt;JavaScript/TypeScript&lt;/strong&gt; startup: &lt;strong&gt;Wasp&lt;/strong&gt; gets you to a deployed MVP fast, especially with the Open SaaS template. For a &lt;strong&gt;Python&lt;/strong&gt; team: &lt;strong&gt;Django&lt;/strong&gt; with Django REST Framework. For a &lt;strong&gt;PHP&lt;/strong&gt; team: &lt;strong&gt;Laravel&lt;/strong&gt;. For speed-to-market in Ruby: &lt;strong&gt;Rails&lt;/strong&gt;. The common thread is choosing a framework that makes decisions for you so you can focus on your product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which framework has the best job market?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Next.js / React&lt;/strong&gt; dominates the JavaScript job market. &lt;strong&gt;Django / Python&lt;/strong&gt; leads in data science, AI/ML, and many enterprise contexts. &lt;strong&gt;Laravel / PHP&lt;/strong&gt; remains strong for agencies, e-commerce, and WordPress-adjacent work. &lt;strong&gt;Rails&lt;/strong&gt; has a loyal but shrinking job market. &lt;strong&gt;Wasp&lt;/strong&gt; is too new for a meaningful job market of its own, but Wasp skills are really React + Node.js + Prisma skills — all highly marketable individually.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Next.js as a true full-stack framework?
&lt;/h3&gt;

&lt;p&gt;You can, but it requires significant assembly. Next.js provides the client and server layers, but you'll need to add your own ORM, authentication, email service, background jobs, and more. This gives you maximum flexibility but also maximum setup time. If you want a batteries-included JavaScript full-stack experience, Wasp is a better fit. If you want a customizable React-first framework and don't mind the assembly, Next.js remains the industry standard.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion: Which Framework Should You Choose?
&lt;/h2&gt;

&lt;p&gt;There's no single "best" framework but there is a best framework &lt;em&gt;for you&lt;/em&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If you are...&lt;/th&gt;
&lt;th&gt;Choose...&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;An enterprise team with complex requirements&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Laravel&lt;/strong&gt; or &lt;strong&gt;Django&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Battle-tested, massive ecosystems, proven at scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A startup prioritizing speed-to-market&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Rails&lt;/strong&gt; or &lt;strong&gt;Wasp&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Maximum productivity, minimum boilerplate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Building a data/ML-heavy product&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Django&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python ecosystem integration is unmatched&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A JS/TS developer who wants batteries included&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Wasp&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The Laravel/Rails experience for the JavaScript ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Need maximum frontend flexibility&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Next.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;React ecosystem, Vercel deployment, custom everything&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Optimizing for job market value&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Next.js&lt;/strong&gt; or &lt;strong&gt;Django&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Largest demand for React and Python skills&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prioritizing AI-assisted development (vibe coding)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Wasp&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Config-as-architecture, low boilerplate, batteries-included&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>vibecoding</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>Claude Code for Fullstack Development: The 3 Things You Actually Need</title>
      <dc:creator>vincanger</dc:creator>
      <pubDate>Fri, 13 Feb 2026 13:00:00 +0000</pubDate>
      <link>https://forem.com/wasp/claude-code-for-fullstack-development-the-3-things-you-actually-need-1p6p</link>
      <guid>https://forem.com/wasp/claude-code-for-fullstack-development-the-3-things-you-actually-need-1p6p</guid>
      <description>&lt;h2&gt;
  
  
  How Can I Use Claude Code Effectively?
&lt;/h2&gt;

&lt;p&gt;There's a lot of hype around vibe coding with Claude Code.&lt;/p&gt;

&lt;p&gt;The good news is that it's warranted. Claude Code can take care of some &lt;a href="https://www.anthropic.com/news/claude-opus-4-5" rel="noopener noreferrer"&gt;surprisingly complex coding tasks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The bad news is that it's over-hyped, with claims of amazing apps being vibe coded in a couple hours, or complex workflows that use 10 parallel sub-agents running in a loop to replace the work of 5 software engineers.&lt;/p&gt;

&lt;p&gt;If you're not already a Claude Code power user, all this hype can leave you questioning how to use it effectively. &lt;em&gt;Am I missing out on productivity gains by not adopting this insane new workflow? Should I be using subagents, commands, skills, or MCP servers for my use case? If so, how?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I was asking myself these exact questions, so I did a good few weeks of research and testing, and reached the following conclusion:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With just a few well-picked tools, and Claude Code's basic features, you have enough to "vibe code" great full-stack apps.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  You Don't Need All its Features
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Weird seeing all these complex LLM workflows and tools. Meanwhile I run one continuous Claude convo per project... I've never used a subagent. Never used MCP…&lt;br&gt;
And I have wildly good results ¯_(ツ)_/¯&lt;/em&gt;&lt;br&gt;&lt;br&gt;
— &lt;a href="https://x.com/chris_mccord/status/2016554559078883510" rel="noopener noreferrer"&gt;Chris McCord, creator of the Phoenix framework&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While Claude Code's abilities are impressive, you quickly realize that there is a lot of feature overlap and stuff you just generally won't have to touch often if you get a few things right from the start. I'll explain what these are, and then go into more detail on each topic within this article.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Provide it with full-stack debugging visibility&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This allows Claude to actually see and respond to what it's coding, rather than us having to copy-paste errors, or describe issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Give Claude Code access to up-to-date, LLM-friendly documentation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is crucial when working with LLMs that may have outdated knowledge, hallucinate solutions, or get thrown off by "noisy" documentation that's not optimized for LLMs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Use the right tech stack or framework&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is probably the most overlooked of these three approaches. By picking the right framework, you give AI clear patterns to follow, and remove a lot of complexity right from the start.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this foundation, you'll be able to build and deploy fullstack apps easily by mostly using Claude Code's default workflows, and just a couple custom commands/skills (I also packed these ideas into a simple Claude Code plugin you can install and use, but I'll talk more about that later).&lt;/p&gt;

&lt;p&gt;This approach works because it provides guardrails and the right patterns for the agent to follow, so you can spend more time on business logic implementation, and less time working out specifications and technical details.&lt;/p&gt;

&lt;p&gt;Essentially, you get to work with the agent on &lt;em&gt;what&lt;/em&gt; you want, rather than having to explain &lt;em&gt;how&lt;/em&gt; you want it, bringing that magic feeling of AI-assisted coding to complex, full-stack apps.&lt;/p&gt;

&lt;p&gt;Let's dive in.&lt;/p&gt;




&lt;h2&gt;
  
  
  Giving Claude Code Full-Stack Vision
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Establishing a Tight Feedback Loop
&lt;/h3&gt;

&lt;p&gt;Our typical AI-assisted coding workflow tends to look like this: we prompt, then wait, then look over the generated code (maybe), then check on things in the browser. If we've got some errors or some bad looking frontend designs, we copy and paste them and try to (better) explain what we want.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/gOMOpURvoRY"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;What's worse is we might have to do this a few times before we're satisfied, or get things working again.&lt;/p&gt;

&lt;p&gt;By always keeping ourselves in the loop, &lt;a href="https://www.anthropic.com/research/estimating-productivity-gains" rel="noopener noreferrer"&gt;we're slowing things down a lot&lt;/a&gt;. We should, at times, just get out of the way and let the agent improve the code with each iteration until its done, before checking the result.&lt;/p&gt;

&lt;p&gt;But to do this, we need to give Claude Code a "set of eyes". Luckily, this is possible with the right features and tools, allowing it to see the results of the code it wrote, and quickly modify it autonomously if it encounters an error anywhere in the stack.&lt;/p&gt;

&lt;p&gt;Let's check out how.&lt;/p&gt;

&lt;h3&gt;
  
  
  Running the Dev Server as a Background Task
&lt;/h3&gt;

&lt;p&gt;Claude Code introduced their &lt;a href="https://code.claude.com/docs/en/interactive-mode#background-bash-commands" rel="noopener noreferrer"&gt;background tasks feature&lt;/a&gt; which lets it execute long-running tasks, like app development servers (e.g. &lt;code&gt;npm run dev&lt;/code&gt;), on the side without blocking Claude's progress on other work. The nice part is that Claude can continue to read and respond to the output of this task while you work.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/ixT5Etvs9O0"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;To run commands in the background, you can either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt Claude Code to run a command in the background, e.g. &lt;code&gt;"run my app's dev server in the background"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Press Ctrl+B to move a regular Bash tool invocation to the background, e.g. &lt;code&gt;"run the dev server"&lt;/code&gt; + &lt;code&gt;Ctrl+b&lt;/code&gt; as it starts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even though Claude can read the output of your background tasks, there are times you may want to check up on them yourself, and you still can do that. Just use the down arrow to highlight the background task message and click enter.&lt;/p&gt;

&lt;p&gt;This is great because now Claude can react to issues that occur from building and serving your code. Unfortunately, it still can't react to errors that occur while your app is running in the browser.&lt;/p&gt;

&lt;p&gt;But there's a cool way to solve this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Browser Automation Tools
&lt;/h3&gt;

&lt;p&gt;The missing piece so far is giving Claude the ability to actually &lt;em&gt;see&lt;/em&gt; the result of the code it wrote, most typically what the UI looks like.&lt;/p&gt;

&lt;p&gt;Problems that only show up &lt;strong&gt;after the app is running in the browser&lt;/strong&gt;, like design issues and runtime errors, aren't yet visible to the agent. So this tends to be where the human steps in to report back to: &lt;em&gt;"the button is misaligned"&lt;/em&gt;, &lt;em&gt;"there's a 404 error when trying to login"&lt;/em&gt;, &lt;em&gt;"the console says something about &lt;code&gt;undefined&lt;/code&gt;"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;But luckily, we can arm Claude Code with browser automation tools to solve for this. These tools allow for programmatic control of the browser, like loading pages, clicking buttons, inspecting elements, reading console logs, and even taking screenshots.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/oyYwfbuNrtc"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;This closes the loop for the &lt;em&gt;entire&lt;/em&gt; stack and gives Claude the autonomy to complete larger features tasks entirely on its own.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.chrome.com/blog/chrome-devtools-mcp" rel="noopener noreferrer"&gt;Chrome DevTools MCP server&lt;/a&gt; is one of the best options currently out there, though there are many alternatives. It's easy to install, and specializes in browser debugging and performance insights.&lt;/p&gt;

&lt;p&gt;To install it, run the following command in the terminal to add it to your current project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add chrome-devtools &lt;span class="nt"&gt;--scope&lt;/span&gt; project npx chrome-devtools-mcp@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then start a new Claude session and give it a prompt like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Verify in the browser that your change works as expected.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see a separate Chrome instance open up being controlled by Claude. Go ahead and give it more tasks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;authenticating a test user&lt;/li&gt;
&lt;li&gt;checking the lighthouse performance score of a site (e.g. how fast it loads)&lt;/li&gt;
&lt;li&gt;giving you feedback on how to improve your app's design&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tying it All Together
&lt;/h3&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/eS1Uio_rrP8"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;Now, when you're implementing full-stack features in your app, ask Claude to verify the feature works correctly by checking the logs in the development server, as well as in the browser with the Chrome DevTools MCP.&lt;/p&gt;

&lt;p&gt;Alternatively, if you want Claude to &lt;em&gt;always&lt;/em&gt; automatically verify changes in the browser with the DevTools MCP without having to explicitly ask it to do so, you can &lt;a href="https://code.claude.com/docs/en/memory#set-up-project-memory" rel="noopener noreferrer"&gt;add a rule to Claude's memory in your &lt;code&gt;CLAUDE.md&lt;/code&gt; file&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Give the Agent Access to the Right Docs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Versioning Problem
&lt;/h3&gt;

&lt;p&gt;You've probably experienced this: you're vibe coding using a library's API, and the AI confidently writes code that would have worked perfectly… two versions ago. Or it creates some crazy, over-engineered work-around to a known issue that has a simple solution in its documentation.&lt;/p&gt;

&lt;p&gt;This is because the model's training data has a cut-off date. LLMs and tools like Claude have no way of knowing about the updated code patterns, unless you give it access to the current documentation.&lt;/p&gt;

&lt;p&gt;But, as &lt;a href="https://x.com/karpathy/status/1899876370492383450" rel="noopener noreferrer"&gt;Andrej Karpathy observed&lt;/a&gt;, most documentation contains content that's not relevant for LLMs:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;99% of libraries still have docs that basically render to some pretty .html static pages assuming a human will click through them. In 2025 the docs should be a your_project.md text file that is intended to go into the context window of an LLM.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There's &lt;a href="https://research.trychroma.com/context-rot" rel="noopener noreferrer"&gt;research to back up his claim,&lt;/a&gt; showing that LLM performance degrades when irrelevant content, like HTML syntax or verbose instructions for humans, is added to context as it distracts from the task and reduces accuracy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In other words, every unnecessary token in your context window makes the AI slightly worse at its job.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So we need to be giving Claude Code the &lt;em&gt;right&lt;/em&gt; kind of docs.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution: Curated Doc Access
&lt;/h3&gt;

&lt;p&gt;The fix is simple: give the agent the ability to fetch and read the relevant, LLM-optimized documentation for the tools you're using.&lt;/p&gt;

&lt;p&gt;Here are the two main ways developers are accomplishing this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MCP Servers&lt;/strong&gt; — A standard for external systems to serve data to AI agents. Popular dev tools, such as &lt;a href="https://vercel.com/docs/mcp/vercel-mcp" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;, make these available with doc searching tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;llms.txt and doc maps&lt;/strong&gt; — A standard for publishing LLM-friendly documentation at a well-known URL, e.g. &lt;a href="https://wasp.sh/llms.txt" rel="noopener noreferrer"&gt;https://wasp.sh/llms.txt&lt;/a&gt;. The agent fetches structured docs optimized for LLM context windows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  MCP Servers for Docs Fetching
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Model Context Protocol (MCP)&lt;/a&gt; is an open standard for connecting AI applications (i.e. agents, LLMs) to external systems. Claude Code can communicate with an MCP server to access specialized tools and information.&lt;/p&gt;

&lt;p&gt;There are already tons of MCP servers for popular tools, like Supabase, Jira, Canva, Notion, and Vercel. Claude Code has &lt;a href="https://code.claude.com/docs/en/mcp#popular-mcp-servers" rel="noopener noreferrer"&gt;a docs section listing these and many more&lt;/a&gt;, with instructions on how to install them if you’re interested.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fom5hqjf4hp44bs0jbe9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fom5hqjf4hp44bs0jbe9g.png" alt="the Context7 MCP's  raw `get-library-docs` endraw  tool"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Developer Tool MCP servers like &lt;a href="https://supabase.com/docs/guides/getting-started/mcp" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt; and &lt;a href="https://vercel.com/docs/ai-resources/vercel-mcp" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; have tools which will fetch documentation for the agent based on a query. There are some pros and cons to this approach, though. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;can do some pre-processing on the docs before sending them back&lt;/li&gt;
&lt;li&gt;can version-check, filter, and fetch relevant snippets across multiple docs/guides&lt;/li&gt;
&lt;li&gt;return structured outputs instead of raw text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the MCP server decides what is relevant, ignoring potentially useful information&lt;/li&gt;
&lt;li&gt;all of its tools (not just doc fetching tools) get loaded into, and quickly fill up, the LLM’s context window, degrading the agent’s performance&lt;/li&gt;
&lt;li&gt;more overhead for the agent: evaluate prompt → find the right MCP tool → call it → wait for response from MCP server → evaluate response → take action&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because LLMs don’t have a real memory, they have to load information into context with every new session, such as the tools they can use. A single MCP server can add around 15-30 tools to the context, and with multiple servers you can easily consume 10-20% or more of your LLM’s context window before you even begin working.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn8m9oshafywmfncilsbi.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn8m9oshafywmfncilsbi.webp" alt="Checking the context usage in a Claude Code session."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to see how much of your context window is already used up, you can run the &lt;code&gt;/context&lt;/code&gt; slash command in an active Claude Code session.&lt;br&gt;
The example above shows that 2.5% of the context window is used up by just one MCP server.&lt;/p&gt;

&lt;p&gt;And as an LLM’s context window fills up, it’s performance degrades. Some devs even suggest starting a new session once the context is 75% full to avoid this, which is possible with the &lt;code&gt;/clear&lt;/code&gt; command in Claude Code. You can also run the &lt;code&gt;/compact&lt;/code&gt; command which creates a summary of your current session’s context and passes it along to the next session.&lt;/p&gt;

&lt;p&gt;Luckily, if your main reason for using an MCP server is just for documentation searching, then an alternative open standard exists that may be a better fit.&lt;/p&gt;
&lt;h3&gt;
  
  
  LLM-friendly Docs URLs — LLMs.txt
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://llmstxt.org/" rel="noopener noreferrer"&gt;LLMs.txt&lt;/a&gt; has quickly become the standard for providing LLMs with context-friendly versions of websites at an &lt;code&gt;/llms.txt&lt;/code&gt; path.&lt;/p&gt;

&lt;p&gt;Try it out on some of your favorite developer tools URLs, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stripe.com/llms.txt" rel="noopener noreferrer"&gt;stripe.com/llms.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://supabase.com/llms.txt" rel="noopener noreferrer"&gt;supabase.com/llms.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wasp.sh/llms.txt" rel="noopener noreferrer"&gt;wasp.sh/llms.txt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/zBsc8nIiXGk"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;Although llms.txt files might vary widely in the content they surface, they always follow the same format of a simple markdown file with the title of the website and some links. That’s it! This allows LLMs to get precise information without all the fluff.&lt;/p&gt;

&lt;p&gt;Here are some of the pros and cons of using llms.txt for documentation fetching:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;curated list of the most relevant information for LLMs and agents&lt;/li&gt;
&lt;li&gt;extremely simple; works with any agent that can fetch URLs&lt;/li&gt;
&lt;li&gt;agents decide which links to follow and can see full source text&lt;/li&gt;
&lt;li&gt;very context window efficient&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;raw docs / markdown files may transmit more information than needed&lt;/li&gt;
&lt;li&gt;the agent could fetch incompatible links / files&lt;/li&gt;
&lt;li&gt;the agent might need more guidance / rules on how to interact with the docs correctly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my opinion, I think that fetching docs via an &lt;code&gt;llms.txt&lt;/code&gt; URL is the better approach as its more context efficient. For example, a typical documentation file is ~100 tokens versus 5,000-10,000 tokens for just one MCP server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That’s a 10x reduction in context usage.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Claude Code is also great at navigating documentation maps to only fetch the most relevant information. Plus, you get the added benefit that &lt;code&gt;llms.txt&lt;/code&gt; files are easier for humans to reference as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp1r64tmx6d0f3lyoa4hf.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp1r64tmx6d0f3lyoa4hf.webp" alt="Claude Code fetching the correct version of the Wasp docs via llms.txt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's also the method that Claude Code uses for its &lt;a href="https://simonwillison.net/2025/Oct/24/claude-code-docs-map/" rel="noopener noreferrer"&gt;own doc fetching internally&lt;/a&gt;. So when you ask it a question about its own features, it will first fetch its &lt;a href="https://simonwillison.net/2025/Oct/24/claude-code-docs-map/" rel="noopener noreferrer"&gt;documentation map markdown file URL&lt;/a&gt; to find the correct guides.&lt;/p&gt;

&lt;p&gt;So now that you know how to give Claude Code access to up-to-date documenation, the next question to answer is which tools might you need to provide the docs for? &lt;/p&gt;

&lt;p&gt;And the most obvious answer is the &lt;strong&gt;tech stack or framework&lt;/strong&gt; you’re building your full-stack app with.&lt;/p&gt;




&lt;h2&gt;
  
  
  Choosing the Right Tech Stack / Framework
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Popular Choices
&lt;/h3&gt;

&lt;p&gt;This is probably the most overlooked of the 3 pillars. &lt;/p&gt;

&lt;p&gt;Starting with a tech stack that AI can easily reason about will make the job of building the app you want significantly easier. There are a lot of options out there, but luckily there are many solid choices, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://wasp.sh" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt; (React, NodeJS, Prisma)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nextjs.org/docs" rel="noopener noreferrer"&gt;NextJS&lt;/a&gt; (React, NodeJS)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://laravel.com/docs" rel="noopener noreferrer"&gt;Laravel&lt;/a&gt; (PHP)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://rubyonrails.org/docs" rel="noopener noreferrer"&gt;Ruby on Rails&lt;/a&gt; (Rails)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In 2026, you'll be able to get very far with Claude Code and any of the frameworks listed above. But while these frameworks all offer good conventions, and are responsible for stitching together the most important parts of the stack, most of these still require some sort of additional integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which one should you go with?
&lt;/h3&gt;

&lt;p&gt;For NextJS, which is more client-side focused, you have to chose and connect your own database layer. For Laravel and Rails, which unify backend and database, you need to decide which client to use and how it will talk to your backend.&lt;/p&gt;

&lt;p&gt;That's why a lot of developers will reach for popular stacks/combos that include these frameworks, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NextJS + tRPC + Prisma + NextAuth (aka &lt;a href="https://create.t3.gg/en/introduction" rel="noopener noreferrer"&gt;T3 Stack&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://inertiajs.com/docs/introduction" rel="noopener noreferrer"&gt;Laravel + Inertia.js + React&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hotwired.dev/" rel="noopener noreferrer"&gt;Rails + Hotwire&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You might have noticed as well that the T3 Stack is the only one to include an authentication library, NextAuth. That's because the backend-focused frameworks, Laravel and Rails, have an opinionated way of adding authentication to your app already, but NextJS does not.&lt;/p&gt;

&lt;p&gt;Wasp, on the other hand, is the only one of the bunch that unifies all parts of the stack — client ↔ backend ↔ database — while also being opinionated on features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is all great, but which one should you ultimately choose?&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The More Opinionated, The Better
&lt;/h3&gt;

&lt;p&gt;Well, the more opinionated the framework, the better it vibes with AI.&lt;/p&gt;

&lt;p&gt;If a framework is &lt;strong&gt;opinionated&lt;/strong&gt;, it means there's usually one obvious place to put code and one common pattern to follow. The AI doesn't have to guess. They've already made decisions ahead of time so you (and your agent) don't have to. They've encoded architectural wisdom into conventions, picked the libraries to use, the way authentication is wired, and how the app should be structured.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So when there are fewer decisions to make, less boilerplate to write, and fewer tools to stitch together, the development process becomes more reliable.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And as the app gets more complex, AI doesn't lose its focus, because the framework is handling a lot of underlying complexity.  You can also understand and inspect what is being generated more easily, and avoid building yourself into a messy corner.&lt;/p&gt;

&lt;p&gt;Consider that &lt;strong&gt;opinionated frameworks can reduce boilerplate by 60-80%&lt;/strong&gt;. Wasp's auth declaration, for example, replaces 500+ lines of typical authentication code with a 10 to 15-line config. That's 97% less code that needs to be generated and audited!&lt;/p&gt;

&lt;p&gt;Of these frameworks, Wasp is definitely the most opinionated but it's also the newest kid on the block. After that, Laravel and Rails are probably tied for a close second, but they are built on PHP and Rails, respectively, and come with their own distinct ecosystems, so you'll most likely have to pair them with a frontend JavaScript framework like React, too. NextJS, is the most popular but least opinionated of the bunch, so it means there is more complexity and up-front choices you and your AI have to deal with, but this offers more flexibility in the long run.&lt;/p&gt;

&lt;p&gt;So in the end, the choice you make largely depends on what you're trying to achieve, what you're comfortable with, and how much flexibility you need.&lt;/p&gt;

&lt;p&gt;Just remember, the more a framework gives you structure and defaults, the easier it is for AI to generate code that fits correctly — and the less time you spend fixing confusing or inconsistent output.&lt;/p&gt;

&lt;h3&gt;
  
  
  What This Means for Claude Code
&lt;/h3&gt;

&lt;p&gt;Ok. So we've established that working with an opinionated framework means that it it manages a lot of the complexity for you.&lt;/p&gt;

&lt;p&gt;But what does that practically mean when using it with Claude Code?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Subagents for architecture planning?&lt;/strong&gt; The framework already decided the architecture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elaborate plans for where code should live?&lt;/strong&gt; The conventions tell you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Back-and-forth to agree on patterns?&lt;/strong&gt; The patterns are already decided.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Glueing the pieces of your app together?&lt;/strong&gt; The frameworks manage this code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context that explains your app structure?&lt;/strong&gt; It's embedded in the framework.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a sense, the framework acts as a large specification that both you and Claude already understand and agree on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instead of multi-turn conversations to figure out HOW things should be built, you get to just say WHAT you want built.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So when you tell Claude "add a new model for Comments" or "add a user account settings feature", Claude will know exactly what that means and where it all goes. And you also get the added benefit that the implementations follow best practices and are backed by the decisions of experienced professionals behind the framework, and is not just some &lt;a href="https://x.com/karpathy/status/2015883857489522876" rel="noopener noreferrer"&gt;LLM hastily implementing a feature on the wrong assumptions.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This isn't to say that you no longer have to do good planning, create a good spec, or Product Requirement Doc for your agent to follow. This can still be a really important step when vibe coding (or practicing "&lt;a href="https://martinfowler.com/articles/exploring-gen-ai/sdd-3-tools.html" rel="noopener noreferrer"&gt;spec-driven development&lt;/a&gt;").&lt;/p&gt;

&lt;p&gt;But it does mean that, with an opinionated full-stack framework, much less of your planning phases need to be devoted to discussing architectural and technical implementation details.&lt;/p&gt;




&lt;h2&gt;
  
  
  This Approach, In a Plugin
&lt;/h2&gt;

&lt;p&gt;If you want to put this theoretical approach I discussed above to the practical test, then I suggest you try out the &lt;a href="https://github.com/wasp-lang/wasp-agent-plugins/tree/main/plugins/wasp" rel="noopener noreferrer"&gt;Wasp plugin we created for Claude Code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We, the Wasp framework creators, maintain the plugin, so we've battle tested it with Wasp. Plus we're a very responsive community and we're listening to feedback and improving it all the time.&lt;/p&gt;

&lt;p&gt;Here's how to get started:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install Wasp&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; @wasp.sh/wasp-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install the Claude Code plugin&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# add the Wasp marketplace to Claude&lt;/span&gt;
claude plugin marketplace add wasp-lang/wasp-agent-plugins

&lt;span class="c"&gt;# install the plugin from the marketplace&lt;/span&gt;
claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;wasp@wasp-agent-plugins &lt;span class="nt"&gt;--scope&lt;/span&gt; project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start a new Wasp project&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# create a new project&lt;/span&gt;
wasp new

&lt;span class="c"&gt;# change into the project root directory&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;your-wasp-project&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start a Claude Code session&lt;/strong&gt; in your Wasp project directory
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run the init command&lt;/strong&gt; to set up the plugin
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;/div&gt;



&lt;p&gt;From there, you can tell Claude to "start the dev server" and it will walk you through spinning up fullstack visibility as we outlined above. Or ask it to implement a Wasp feature and watch it fetch version-matched documentation guides for you!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqgrs1kgtovwm7obmz3p.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqgrs1kgtovwm7obmz3p.webp" alt="Wasp Claude Code plugin in action"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More importantly, Wasp as a framework pushes into territory that's even more AI-native than the rest, because of its central configuration file(s) where the app is defined.&lt;/p&gt;

&lt;p&gt;This main config file is like your app's blueprint. Wasp takes these declarations, and manages the code for those features for you.&lt;/p&gt;

&lt;p&gt;Take this example config file authentication snippet as reference:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app TaskManager {
  wasp: { version: "^0.21.0" },
  title: "Task Manager",
  auth: {
    userEntity: User,
    methods: {
      email: {},
      google: {}
    },
    onAuthFailedRedirectTo: "/login"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is what an authentication implementation in Wasp looks like. That's it.&lt;/p&gt;

&lt;p&gt;This 8-line config generates what would typically require 500-800 lines of code: components, session handling, password hashing, OAuth flows, and database schemas. Claude just needs to know what auth methods you want.&lt;/p&gt;

&lt;p&gt;Claude doesn't need to worry about choosing what kind of auth implementation to use, or generating any of the glue code. It can just get straight to work building features.&lt;/p&gt;




&lt;h2&gt;
  
  
  When You DO Need the Fancy Stuff
&lt;/h2&gt;

&lt;p&gt;I've spent this whole article arguing that you can ignore a lot Claude Code features for fullstack app development. But I don't want to leave you with the impression that those features are useless.&lt;/p&gt;

&lt;p&gt;Custom subagents, commands, and skills shine when you're doing the same task repeatedly with consistent criteria, e.g.:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Testing&lt;/strong&gt; — A dedicated test-runner subagent that knows your testing patterns, runs suites, analyzes failures, and suggests fixes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://code.claude.com/docs/en/sub-agents#code-reviewer" rel="noopener noreferrer"&gt;Code Reviews&lt;/a&gt;&lt;/strong&gt; — A code review command or subagent that runs tests, fixes bugs, and reviews code after every development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Running Scripts&lt;/strong&gt; — Skills can be useful if you have deterministic tasks you run often, like a deployment script or using a cli tool to convert your blog images to webp. Define them in a Skill and link those scripts to them, and Claude Code will run them when it deems it fit for the task at hand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are tasks where you want the same process followed every time and where a well-configured subagent with specific rules makes sense.&lt;/p&gt;

&lt;p&gt;In most cases, reach for complexity only when the simpler approach stops working.&lt;/p&gt;




&lt;h2&gt;
  
  
  Now Build!
&lt;/h2&gt;

&lt;p&gt;With these three ingredients I think most fullstack app developers can get the vast majority of the work done without reaching for much more:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An opinionated framework that handles architecture/boilerplate so Claude doesn't have to&lt;/li&gt;
&lt;li&gt;Version-matched documentation so Claude has up-to-date implementation details&lt;/li&gt;
&lt;li&gt;Full-stack visibility so Claude can see what's happening and fix it on its own&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With these in place, Claude Code's basic toolset—exploring, planning, reading, writing, running commands—is enough to build real, complex fullstack applications. The subagents, hooks, plugins, and complex configurations are there if you need them, but honestly most of the time, you won't.&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>fullstack</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Turn Claude Code into a Fullstack web app expert 🔌</title>
      <dc:creator>vincanger</dc:creator>
      <pubDate>Tue, 23 Dec 2025 14:58:03 +0000</pubDate>
      <link>https://forem.com/wasp/turn-claude-code-into-a-fullstack-web-app-expert-1hbk</link>
      <guid>https://forem.com/wasp/turn-claude-code-into-a-fullstack-web-app-expert-1hbk</guid>
      <description>&lt;h2&gt;
  
  
  Get Even More Out of Claude Code with the Wasp Plugin
&lt;/h2&gt;

&lt;p&gt;Batteries-included frameworks are a great match for AI-assisted coding tools like &lt;a href="https://docs.anthropic.com/en/docs/claude-code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt;. The frameworks themselves are opinionated and already take care of a lot of routine tasks and boilerplate, which makes the AI's output more deterministic and predictable. &lt;/p&gt;

&lt;p&gt;In effect, frameworks like Wasp take care of a lot of grunt work for you and your AI assistants, shifting the focus to the more complex and creative parts of your app.&lt;/p&gt;

&lt;p&gt;And now with Claude Code's plugin system, which bundles skills, commands, hooks, and rules, you can make sure that Claude Code has expert knowledge of Wasp.&lt;/p&gt;

&lt;p&gt;But configuring, testing, and maintaining all these Claude Code features for your specific projects can be a lot of work. Almost as much as just writing the code yourself (ironic, isn't it?)!&lt;/p&gt;

&lt;p&gt;Luckily for you, the the Wasp Team has created the &lt;a href="https://github.com/wasp-lang/claude-plugins/tree/main/plugins/wasp" rel="noopener noreferrer"&gt;Wasp Claude Code plugin&lt;/a&gt;, curated with the help of community and their own experience, that ensures you are getting the most out of Claude Code. &lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/beUTJYW65Bw"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  Turn Claude into a Wasp Expert
&lt;/h2&gt;

&lt;p&gt;Claude Code knows it can’t do everything perfectly, which is why it allows for user-defined commands, skills, hooks, and rules, which act as sources of knowledge and guardrails when working in your project. &lt;/p&gt;

&lt;p&gt;We’ve done the tedious work for you, and bundled a bunch of the essentials into the Claude Code plugin for Wasp. &lt;/p&gt;

&lt;p&gt;Here’s how you can try it once you’ve got &lt;a href="https://wasp.sh" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt; and &lt;a href="https://www.claude.com/product/claude-code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; installed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Add the Wasp x Claude Code Plugin Marketplace:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude plugin marketplace add wasp-lang/claude-plugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Install the plugin:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;claude plugin install wasp@wasp-plugins --scope project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Once installed, initialize the plugin in a Claude Code session and follow the instructions:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/wasp:init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z67jbnowlzoeqe8988k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z67jbnowlzoeqe8988k.png" alt="Init the Claude Code x Wasp plugin"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the plugin installed, Claude turns into a true Wasp expert by:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Using the right documentation&lt;/strong&gt; — Automatically fetches the correct Wasp docs for your project's version during development and debugging&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoiding common mistakes&lt;/strong&gt; — Provides Wasp-specific tips, patterns, and best practices so Claude doesn't hallucinate or use outdated approaches&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guided workflows&lt;/strong&gt; — Skills and commands so Claude can walk you through setting up Wasp's batteries-included features: auth, email, database, deploying, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full debugging visibility&lt;/strong&gt; — Start managed databases, dev servers, and connect browser console access so Claude has full development and debugging visibility across the entire stack&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result: Claude actually understands Wasp instead of guessing and can get the most out of Wasp features to help you spend less time managing boilerplate or debugging errors, and more time building and shipping app features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give Claude the Wheel, Or Let it Be Your Backseat Driver
&lt;/h2&gt;

&lt;p&gt;One of the most important features of the plugin is that it gives Claude everything it needs to get your Wasp app setup and running locally, with full visibility into what’s going on with your app.&lt;/p&gt;

&lt;p&gt;For example, Claude can use the Plugin’s skills to easily setup, run and monitor Wasp’s:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;managed Postgres DB server,&lt;/li&gt;
&lt;li&gt;local development servers, and&lt;/li&gt;
&lt;li&gt;a Chrome instance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By leveraging these Wasp features, you give Claude &lt;em&gt;instant&lt;/em&gt; access to logs across the entire stack and can drastically reduce development and debugging feedback loops.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76psm63ke9ro4rbt3h6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76psm63ke9ro4rbt3h6w.png" alt="Claude Code fetching Wasp LLM-friendly Docs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On top of that, we’ve added hooks to ensure Claude checks your project’s Wasp version and always pulls the correct LLM-friendly docs before performing important Wasp-related tasks.&lt;/p&gt;

&lt;p&gt;Here are some examples of things you can ask Claude to help with: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Add &lt;code&gt;Google authentication&lt;/code&gt; to my app"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Migrate the database from &lt;code&gt;SQLite&lt;/code&gt; to &lt;code&gt;PostgreSQL&lt;/code&gt; and start it for me”&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Deploy my app to &lt;code&gt;Railway&lt;/code&gt; for me”&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Help me add &lt;code&gt;ShadCN UI&lt;/code&gt; to my app to build a dashboard"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Start a new SaaS app using &lt;code&gt;Wasp's SaaS starter template&lt;/code&gt;"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Why isn't my &lt;code&gt;recurring job&lt;/code&gt; working?"&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With the Wasp plugin, Claude Code will know exactly how to take care of these tasks in your Wasp app, and can take full control of implementation, or guide you through the process.&lt;/p&gt;

&lt;p&gt;We’ve also loaded the plugin with straight-forward slash commands, such as &lt;code&gt;/wasp:help&lt;/code&gt; so that you can always quickly reference what the plugin can do.&lt;/p&gt;

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

&lt;p&gt;The focus for the first iteration of the plugin was to give Claude good fundamentals Wasp knowledge.&lt;/p&gt;

&lt;p&gt;For the future, we’ll expand it with better guardrails and more skills and workflows to really speed up development. We’ll also be adding a separate plugin for &lt;a href="https://opensaas.sh" rel="noopener noreferrer"&gt;Open SaaS&lt;/a&gt;, our open-source SaaS starter built on Wasp, to get you shipping SaaS apps easier and quicker.&lt;/p&gt;

&lt;p&gt;And if you have any feedback or ideas on how to improve the plugin, &lt;a href="https://github.com/wasp-lang/claude-plugins/issues" rel="noopener noreferrer"&gt;let us know&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tooling</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>llm</category>
    </item>
    <item>
      <title>Open SaaS v2.0 -- ShadCN UI, LLM-friendly, MoRs, and more.</title>
      <dc:creator>vincanger</dc:creator>
      <pubDate>Tue, 29 Jul 2025 10:23:42 +0000</pubDate>
      <link>https://forem.com/wasp/open-saas-v20-shadcn-ui-llm-friendly-mors-and-more-ga</link>
      <guid>https://forem.com/wasp/open-saas-v20-shadcn-ui-llm-friendly-mors-and-more-ga</guid>
      <description>&lt;p&gt;What could make a free, open-source, full-featured SaaS boilerplate even better? Probably a fresh new look on top the hottest UI library out there, plus a slew of new features.&lt;/p&gt;

&lt;p&gt;Well, that's exactly what we've done with Open SaaS v2.0.&lt;/p&gt;

&lt;p&gt;Oh, and we're launching it on &lt;a href="https://x.com/hot_town/status/1950117243246821770" rel="noopener noreferrer"&gt;Product Hunt&lt;/a&gt;, so go show your support for open-source SaaS dopeness! 🙏&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1950117243246821770-679" src="https://platform.twitter.com/embed/Tweet.html?id=1950117243246821770"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1950117243246821770-679');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1950117243246821770&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;The most significant change is a complete redesign using Shadcn UI, providing a more modern, consistent, and customizable experience out of the box. This update also includes key framework upgrades, new integrations, and significant codebase improvements to help you build your SaaS faster than ever.&lt;/p&gt;

&lt;p&gt;You're welcome.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Look with Shadcn UI
&lt;/h2&gt;

&lt;p&gt;People &lt;a href="https://www.producthunt.com/products/open-saas/reviews" rel="noopener noreferrer"&gt;really love Open SaaS&lt;/a&gt;, but we knew from the start that if there were a way to improve it, than it would be to offer a better look and feel.&lt;/p&gt;

&lt;p&gt;So we've done just that.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/ehbzm4HJlzM"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;You probably noticed that the design is cleaner, more consistent, and offers more interactive elements. But it's also completely redesigned on top of &lt;a href="https://ui.shadcn.com/" rel="noopener noreferrer"&gt;Shadcn UI&lt;/a&gt; (which is also open source!), so you get a modern, composable, and highly customizable experience out of the box.&lt;/p&gt;

&lt;p&gt;On top of that, we've also made the styles easily themable, and in the future we'll be offering a slick way to find and use a great looking theme, as well as a range of different Landing Page templates for you to choose from. So stay tuned for that!&lt;/p&gt;

&lt;p&gt;Now on to the new features!&lt;/p&gt;

&lt;h2&gt;
  
  
  New Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Lemon Squeezy, Polar, and Paddle Merchants of Record
&lt;/h3&gt;

&lt;p&gt;Merchants of Record (MoR) are great. They're a layer on top of payment processors like Stripe that take the pain out of the legalities and tax compliance of being a merchant.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ru113d22vrt207fr1bm.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ru113d22vrt207fr1bm.webp" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We've added support for &lt;a href="https://www.lemonsqueezy.com/" rel="noopener noreferrer"&gt;Lemon Squeezy&lt;/a&gt; with &lt;a href="https://www.polar.sh/" rel="noopener noreferrer"&gt;Polar&lt;/a&gt; integration &lt;a href="https://github.com/wasp-lang/open-saas/issues/441#issuecomment-3057897604" rel="noopener noreferrer"&gt;in the works&lt;/a&gt; as we speak! Choose the payment processor that best fits your SaaS if Stripe is too granular for your needs.&lt;/p&gt;

&lt;p&gt;And while we're working on Polar right now, next up &lt;a href="https://github.com/wasp-lang/open-saas/issues/445" rel="noopener noreferrer"&gt;we'll be adding support for Paddle&lt;/a&gt; as a MoR to satisfy the needs of the broader international indiehacker community.&lt;/p&gt;

&lt;h3&gt;
  
  
  LLM-friendly Docs and Rules
&lt;/h3&gt;

&lt;p&gt;One of the best use cases for LLM-assisted coding is to get precise answers to your questions about a codebase or library. You can pass it the docs, ask your questions, and get context-aware answers.&lt;/p&gt;

&lt;p&gt;So we've added an LLM-friendly version of the Open SaaS docs, as well as the Wasp framework docs, to make it easier for you to use in your AI coding environments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fww8a5ow86qlhdosb31vn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fww8a5ow86qlhdosb31vn.webp" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just add the following urls to your AI coding environment such as Cursor, Copilot, etc, and mention it in your prompt to get precise answers to your Open SaaS and Wasp framework questions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open SaaS AI-friendly docs:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://docs.opensaas.sh/llms-full.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Wasp framework AI-friendly docs:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://wasp.sh/llms-full.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In addition, we've also got a full set of project-specific Cursor rules files that you can use to make sure your AI assistants stay on the right track. These can be adapted to use with Claude Code, Windsurf, and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  End-to-End Testing with Playwright
&lt;/h3&gt;

&lt;p&gt;One thing I hate about building a SaaS is that I'm constantly worried it might break after adding a new feature. To give you peace of mind, we've integrated a full suite of end-to-end tests using &lt;a href="https://playwright.dev/" rel="noopener noreferrer"&gt;Playwright&lt;/a&gt;. These tests act like a robot user, clicking through your app to verify that everything from user sign-ups to critical payment flows is working exactly as it should.&lt;/p&gt;

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

&lt;p&gt;But we didn't just write tests for ourselves. We've provided the entire setup, &lt;a href="https://docs.opensaas.sh/guides/tests/" rel="noopener noreferrer"&gt;including a CI/CD workflow&lt;/a&gt; file for GitHub Actions. This means you can automatically run these checks on every code change, ensuring you never accidentally break your production app. Ship with confidence, knowing your core features are easily protected, and use our test suite as a foundation for your own custom test cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  More Refactors &amp;amp; Improvements
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgl371tqdsvfc3ldtb4m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgl371tqdsvfc3ldtb4m.jpg" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On top of the headlining features, we've been busy shipping a ton of other improvements to make your life easier. We've squashed bugs, upgraded major dependencies like Node.js and the Wasp framework, and completely refactored the codebase for better organization. We also threw in some handy new integrations like enhanced file uploads with progress bars and a cookie consent banner. Here's a quick rundown of other key changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;New Features &amp;amp; Integrations 🚀&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced File Uploads&lt;/strong&gt;: The file upload functionality has been improved with features like progress bars and validation. The S3 CORS configuration was tightened for improved security.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cookie Consent&lt;/strong&gt;: A cookie consent banner has been implemented.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Major Dependency and Framework Upgrades 🛠️&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wasp Framework&lt;/strong&gt;: There have been multiple upgrades to the Wasp framework, moving from version 0.13.0 up to 0.16.0 and beyond. This indicates active maintenance and adoption of new Wasp features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SDKs&lt;/strong&gt;: The AWS and OpenAI SDKs have been updated to their latest versions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt;: The environment has been updated to Node.js version 20.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Codebase Refactoring and Organization 🗂️&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vertical Reorganization&lt;/strong&gt;: A major refactoring effort was undertaken to organize the codebase "vertically". Functionality for features like &lt;code&gt;auth&lt;/code&gt;, &lt;code&gt;payments&lt;/code&gt;, &lt;code&gt;users&lt;/code&gt;, and &lt;code&gt;file-upload&lt;/code&gt; are now grouped together, improving modularity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Management&lt;/strong&gt;: Significant refactoring was done on the user management and administration pages.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Documentation and Content 📚&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A substantial number of commits are related to adding new blog posts, updating documentation, and creating other content. This reflects a strong focus on community engagement and developer resources.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Help Us, Help You!
&lt;/h2&gt;

&lt;p&gt;We're not done yet. We're going to keep listening to our commonunity and improving Open SaaS.&lt;/p&gt;

&lt;p&gt;So if you've got ideas on how to improve it, please create a &lt;a href="https://github.com/wasp-lang/open-saas/issues" rel="noopener noreferrer"&gt;GitHub issue&lt;/a&gt; or &lt;a href="https://github.com/wasp-lang/open-saas/pulls" rel="noopener noreferrer"&gt;submit a pull request&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Got a cool landing page variation? Submit a PR!&lt;br&gt;
Found a bug? Create an issue!&lt;/p&gt;

&lt;p&gt;Want to support us? Star the &lt;a href="https://github.com/wasp-lang/open-saas" rel="noopener noreferrer"&gt;repo on GitHub&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>saas</category>
      <category>boilerplate</category>
      <category>react</category>
    </item>
    <item>
      <title>From 0 to 10K ⭐: How Open SaaS became the Free Boilerplate Devs Love</title>
      <dc:creator>vincanger</dc:creator>
      <pubDate>Tue, 29 Apr 2025 11:51:32 +0000</pubDate>
      <link>https://forem.com/wasp/from-0-to-10k-how-open-saas-became-the-free-boilerplate-devs-love-45hb</link>
      <guid>https://forem.com/wasp/from-0-to-10k-how-open-saas-became-the-free-boilerplate-devs-love-45hb</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6ar3lb0rvpumm1icncs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6ar3lb0rvpumm1icncs.png" alt="Open SaaS is just WOW! I love it. This is how saas boilerplate templates should be!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Open SaaS Story
&lt;/h2&gt;

&lt;p&gt;When building an app, I want to start on the &lt;strong&gt;unique idea&lt;/strong&gt; that sparked the project in the first place, not spend weeks configuring auth, payments, and user management.&lt;/p&gt;

&lt;p&gt;Of course, there are paid 3rd-party solutions for integrating things like authentication, cron jobs, and email sending quickly. And paid SaaS boilerplates exist, too.&lt;/p&gt;

&lt;p&gt;But when I looked there was surprisingly no great full-featured, open-source solution for building a SaaS quickly.&lt;/p&gt;

&lt;p&gt;So I decided to build one.&lt;/p&gt;

&lt;p&gt;And I'm excited to announce that &lt;strong&gt;it now has over 10,000 stars on GitHub&lt;/strong&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Open SaaS?
&lt;/h2&gt;

&lt;p&gt;For those unfamiliar, &lt;a href="https://opensaas.sh/" rel="noopener noreferrer"&gt;Open SaaS&lt;/a&gt; is a &lt;strong&gt;100% free and open-source, batteries-included SaaS starter kit&lt;/strong&gt;, built on top of the &lt;a href="https://wasp.sh" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt; full-stack framework (using React, Node.js, and Prisma). &lt;/p&gt;

&lt;p&gt;Its mission is simple: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accelerate and focus your SaaS development&lt;/strong&gt; by providing an open-source, full-featured foundation with essential features, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication (email, google, github, etc.)&lt;/li&gt;
&lt;li&gt;Payments (Stripe or Lemon Squeezy integration)&lt;/li&gt;
&lt;li&gt;Example Apps w/ the OpenAI API&lt;/li&gt;
&lt;li&gt;AWS S3 File Upload&lt;/li&gt;
&lt;li&gt;Email sending&lt;/li&gt;
&lt;li&gt;Admin dashboard&lt;/li&gt;
&lt;li&gt;And more, right out of the box&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best part is that it doesn't rely on a ton of paid 3rd-party services like other templates do, so you own more of your app (oh, and you can deploy it wherever you want, too).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem2jmugc5nplww5gk47t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem2jmugc5nplww5gk47t.png" alt="Open SaaS GitHub Star Chart"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since its launch, Open SaaS hasn't just gathered stars; it has empowered developers to &lt;a href="https://docs.opensaas.sh/blog/2025-03-12-going-from-an-idea-to-mvp-in-weeks-promptpandas-launches/" rel="noopener noreferrer"&gt;launch countless projects faster&lt;/a&gt;, turning ideas into &lt;a href="https://wasp.sh/blog/2024/09/17/from-idea-to-20k-in-days-how-wasp-accelerated-nuloapps-launch" rel="noopener noreferrer"&gt;profitable businesses, sometimes in a matter of days&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://scribeist.com/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmgpbi021sqv7tvqiqeo.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's been crazy to see the apps and businesses people are building with it, like some of these below (yes, all of them were built with Open SaaS 🤩):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.searchcraft.io/" rel="noopener noreferrer"&gt;SearchCraft.io&lt;/a&gt; - powerful search SDK&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.promptpanda.io/" rel="noopener noreferrer"&gt;Prompt Panda&lt;/a&gt; - prompt library &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://scribeist.com/" rel="noopener noreferrer"&gt;Scribeist&lt;/a&gt; - SEO-optimized AI writing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Besides all the cool stuff being built with it, an interesting side-effect of Open SaaS is that it has also become the cornerstone of the &lt;a href="https://wasp.sh" rel="noopener noreferrer"&gt;Wasp ecosystem&lt;/a&gt;, demonstrating the framework's power and really delighting developers in the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Support us! 🙏⭐️
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fid9s6t8rcvfxty40bv2m.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fid9s6t8rcvfxty40bv2m.gif" alt="GH star click"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everything we do at Wasp is open-source. You can show &lt;a href="https://github.com/wasp-lang/wasp" rel="noopener noreferrer"&gt;your support by giving us a star on Github&lt;/a&gt;. It helps us make web development easier and motivates us to write more articles like this!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqgbmn45pia04bxt6zf83.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqgbmn45pia04bxt6zf83.gif" alt="support us"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/wasp-lang/wasp" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;⭐️ Thanks For Your Support 🙏&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the Hood: The Wasp Advantage
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://wasp.sh/blog/2024/01/30/open-saas-free-open-source-starter-react-nodejs" rel="noopener noreferrer"&gt;Launched in December 2023&lt;/a&gt;, Open SaaS adoption took off almost immediately. The positive reception was surprising, but it confirmed our belief that developers needed a high-quality, open-source SaaS boilerplate starter. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsza7orzu4bdnlfsnbxp3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsza7orzu4bdnlfsnbxp3.png" alt="The open-saas template is great starting point. I'm managing my db, back end functions, actions, queries, all with so much ease."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While Open SaaS leverages familiar tools like React, NodeJS, and Prisma, and comes with a bunch of built-in examples like an OpenAI example app, AWS S3 file storage, and more, its secret sauce lies in its core tool choice that glues them all together: the &lt;a href="https://wasp.sh" rel="noopener noreferrer"&gt;Wasp framework&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Wasp is special because it's the only full-stack framework that &lt;em&gt;actually manages&lt;/em&gt; the tedious boilerplate that plagues modern web development. &lt;/p&gt;

&lt;p&gt;It does this through its use of a central config file and its compiler, allowing developers (and AI) to define tons of full-stack features in just a few lines of code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6w63w4bql0eh5fnw1etm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6w63w4bql0eh5fnw1etm.png" alt="Say What!?"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Central Nervous System: &lt;code&gt;main.wasp&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Think of the &lt;code&gt;main.wasp&lt;/code&gt; config file as the &lt;strong&gt;central nervous system&lt;/strong&gt; of your application. Here, you declaratively define key aspects of your app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Authentication methods&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Database models&lt;/strong&gt; (via Prisma integration)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Routes and Pages&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;API endpoints&lt;/strong&gt; (Queries and Actions)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Background jobs&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Email sending&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  ...and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This configuration file acts as a single &lt;strong&gt;"source of truth"&lt;/strong&gt; for your app's architecture, a concept highlighted in our &lt;a href="https://dev.to/wasp/a-structured-workflow-for-vibe-coding-full-stack-apps-352l"&gt;post on AI-assisted workflows&lt;/a&gt;, and it's how you can get complex web app features really quickly and easily as a developer.&lt;/p&gt;

&lt;p&gt;Here's a quick code snippet of what a &lt;code&gt;main.wasp&lt;/code&gt; file looks like:&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="nx"&gt;app&lt;/span&gt; &lt;span class="nx"&gt;exampleApp&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;wasp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;^0.16.3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Example App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;userEntity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
      &lt;span class="nx"&gt;github&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;route&lt;/span&gt; &lt;span class="nx"&gt;LoginRoute&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/login&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Login&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="nx"&gt;Login&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Login&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@src/features/auth/login&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;route&lt;/span&gt; &lt;span class="nx"&gt;EnvelopesRoute&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/envelopes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;EnvelopesPage&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="nx"&gt;EnvelopesPage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;authRequired&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;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;EnvelopesPage&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@src/features/envelopes/EnvelopesPage.tsx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="nx"&gt;getEnvelopes&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getEnvelopes&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@src/features/envelopes/operations.ts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;entities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Envelope&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;UserBudgetProfile&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="nx"&gt;createEnvelope&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createEnvelope&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@src/features/envelopes/operations.ts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;entities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Envelope&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;UserBudgetProfile&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Wasp Compiler: Where the Magic Happens
&lt;/h3&gt;

&lt;p&gt;Then, the &lt;strong&gt;Wasp compiler&lt;/strong&gt; takes over. It analyzes your &lt;code&gt;.wasp&lt;/code&gt; declarations alongside your custom React and Node.js code (where you write your specific business logic) and intelligently generates the complete underlying code. &lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  Setting up the server and database connections.&lt;/li&gt;
&lt;li&gt;  Wiring up communication between client and server with full type-safety.&lt;/li&gt;
&lt;li&gt;  Handling complex authentication flows and session management.&lt;/li&gt;
&lt;li&gt;  Simplifying deployment with commands like &lt;code&gt;wasp deploy&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42n18hzcd374nu3587zd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42n18hzcd374nu3587zd.png" alt="Wasp Architecture Diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using this as the basis for Open SaaS, this translates directly into &lt;em&gt;less code and complexity&lt;/em&gt; for essential features. &lt;/p&gt;

&lt;p&gt;In other words, you get to &lt;strong&gt;focus solely on building your unique product&lt;/strong&gt;, rather than struggling with putting all the pieces together.&lt;/p&gt;

&lt;p&gt;Implementing a new authentication method, adding background jobs, or defining protected routes is as easy as a couple lines of code in the &lt;code&gt;main.wasp&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;This allows Open SaaS apps to be feature-rich yet maintainable and, crucially, easy to understand and extend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open SaaS + AI = Vibe Coding Superpowers
&lt;/h2&gt;

&lt;p&gt;This also means that Open SaaS is exceptionally well-suited for AI-assisted development. &lt;/p&gt;

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

&lt;p&gt;Because the effectiveness of AI-assisted development (or "vibe coding" as some call it) &lt;em&gt;heavily depends&lt;/em&gt; on the underlying codebase structure and clarity.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/WYzEROo7reY"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Open SaaS's foundation on Wasp makes it exceptionally well-suited for AI-assisted development for two key reasons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clear Architecture through Wasp's Config:&lt;/strong&gt; The &lt;code&gt;main.wasp&lt;/code&gt; file serves as a perfect "source of truth" for AI tools. &lt;/p&gt;

&lt;p&gt;When an AI assistant needs to understand your app's structure – its routes, models, operations, and features – everything is clearly laid out in one declarative file. &lt;/p&gt;

&lt;p&gt;This makes it &lt;em&gt;significantly easier&lt;/em&gt; for AI to comprehend the context and generate accurate, relevant code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Focus on Business Logic:&lt;/strong&gt; Since Wasp's compiler handles the underlying infrastructure, both you and your AI assistant can focus purely on implementing your unique features. &lt;/p&gt;

&lt;p&gt;No time is wasted having the AI generate or explain boilerplate code for auth flows, API setup, or database connections – Wasp handles all of that.&lt;/p&gt;

&lt;p&gt;This means that LLMs have considerably less code to write, and can pass of the complexity of connecting the different parts of the stack to Wasp. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8y1v7ymxpkdkxx95odvd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8y1v7ymxpkdkxx95odvd.png" alt="Noice"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(BTW, If you're curious to see how using Open SaaS with AI-assisted development tools like Cursor looks like, make sure to check out this &lt;a href="https://www.youtube.com/watch?v=WYzEROo7reY" rel="noopener noreferrer"&gt;3 hour walkthrough tutorial on YouTube&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Using AI tools in a vibe coding workflow like this on top of Open SaaS's robust foundation creates a powerful development environment where you and your LLM buddy only have to focus on the fun stuff – &lt;strong&gt;the business logic of your SaaS app&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future of Open SaaS
&lt;/h2&gt;

&lt;p&gt;Hitting 10,000 GitHub stars is a milestone, but it's just the beginning. The community and I are actively working on making Open SaaS even more powerful and flexible.&lt;/p&gt;

&lt;p&gt;Here's some stuff we have in store for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Complete Redesign w/ Shadcn UI:&lt;/strong&gt; We're working on a complete redesign of the Open SaaS template to make it even more modern and user-friendly by leveraging the power of &lt;a href="https://ui.shadcn.com/" rel="noopener noreferrer"&gt;Shadcn UI&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More Example Apps:&lt;/strong&gt; Ready-to-use app templates, like ones that leverage AI APIs (because GPT Wrappers are in!).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Admin Features:&lt;/strong&gt; Expanding the admin dashboard with more analytics, role-based authentication, and customization options.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BTW, if you have any feature requests, please let us know by creating an issue or a discussion on &lt;a href="https://github.com/wasp-lang/open-saas/issues" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Whether you're a React developer looking to contribute new features, a designer interested in improving the UI, or someone who just found a bug, don't be shy!&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to Build Your SaaS?
&lt;/h2&gt;

&lt;p&gt;In just a few months, Open SaaS has grown from an idea to &lt;a href="https://github.com/topics/saas" rel="noopener noreferrer"&gt;one of the most popular SaaS repos on GitHub&lt;/a&gt; that's helping developers launch SaaS applications by writing less boilerplate code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/topics/saas" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqmqyj0dio07o2lbtqn6w.png" alt="Open SaaS -- GitHub Topics "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By combining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A robust, full-featured SaaS starter&lt;/li&gt;
&lt;li&gt;The power and simplicity of the Wasp framework&lt;/li&gt;
&lt;li&gt;An active, supportive community&lt;/li&gt;
&lt;li&gt;AI-friendly architecture for modern development workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open SaaS has become &lt;strong&gt;more than just a template&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you wanna start building your SaaS, all you need to get started is &lt;a href="https://wasp.sh/docs/quick-start" rel="noopener noreferrer"&gt;install Wasp&lt;/a&gt; and get the Open SaaS template by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; https://get.wasp.sh/installer.sh | sh
wasp new &lt;span class="nt"&gt;-t&lt;/span&gt; saas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that, check out the &lt;a href="https://docs.opensaas.sh" rel="noopener noreferrer"&gt;Open SaaS documentation 📚 &lt;/a&gt; where everything you need to know is outlined for you, along with step-by-step setup guides!&lt;/p&gt;

&lt;p&gt;And don't forget to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐️ Star &lt;a href="https://github.com/wasp-lang/open-saas" rel="noopener noreferrer"&gt;Open SaaS on GitHub&lt;/a&gt; to support the project&lt;/li&gt;
&lt;li&gt;⭐️ Star &lt;a href="https://github.com/wasp-lang/wasp" rel="noopener noreferrer"&gt;Wasp on GitHub&lt;/a&gt; to support the framework&lt;/li&gt;
&lt;li&gt;💬 Join the &lt;a href="https://discord.com/invite/rzdnErX" rel="noopener noreferrer"&gt;Wasp Discord community&lt;/a&gt; to connect with other builders&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>A Structured Workflow for "Vibe Coding" Full-Stack Apps</title>
      <dc:creator>vincanger</dc:creator>
      <pubDate>Wed, 16 Apr 2025 08:46:36 +0000</pubDate>
      <link>https://forem.com/wasp/a-structured-workflow-for-vibe-coding-full-stack-apps-352l</link>
      <guid>https://forem.com/wasp/a-structured-workflow-for-vibe-coding-full-stack-apps-352l</guid>
      <description>&lt;p&gt;There's a lot of hype surrounding "vibe coding". You've probably seen the AI influencers making claims like how you can build SaaS apps in 15 minutes with just a few tools and prompts.&lt;/p&gt;

&lt;p&gt;But, as you might have guessed, these example workflows are pretty flimsy.&lt;/p&gt;

&lt;p&gt;Yes, you can copy a landing page, or build a decent CRUD app, but you're not gonna be able to build a complex SaaS or internal tool with them.&lt;/p&gt;

&lt;p&gt;But that doesn't mean there aren't workflows out there that can positively augment your development workflow. Anyone who's tinkered around with different AI-assisted techniques can tell you that there is some real magic in these tools.&lt;/p&gt;

&lt;p&gt;That's why I spent a couple weeks researching the best techniques and workflow tips and put them to the test by building a full-featured, full-stack app with them.&lt;/p&gt;

&lt;p&gt;Below, you'll find my honest review and the workflow that I found that really worked while using Cursor with Google's Gemini 2.5 Pro, and a solid UI template.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/WYzEROo7reY"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;By the way, I came up with this workflow by testing and building a full-stack personal finance app in my spare time, tweaking and improving the process the entire time. Then, after landing on a good template and workflow, I rebuilt the app again and recorded it entirely, from start to deployments, in a ~3 hour long youtube video (above).&lt;/p&gt;

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

&lt;p&gt;This article is a summary of the key approaches to implementing this workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Laying the Foundation
&lt;/h2&gt;

&lt;p&gt;There are a lot of moving parts in modern full-stack web apps. Trying to get your LLM to glue it all together for you cohesively just doesn't work.&lt;/p&gt;

&lt;p&gt;That's why you should give your AI helper a helping hand by starting with a solid foundation and leveraging the tools we have at our disposal. &lt;/p&gt;

&lt;p&gt;In practical terms this means using stuff like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;UI Component Libraries&lt;/li&gt;
&lt;li&gt;Boilerplate templates&lt;/li&gt;
&lt;li&gt;Full-stack frameworks with batteries-included&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Component libraries and templates are great ways to give the LLM a known foundation to build upon. It also takes the guess work out of styling and helps those styles be consistent as the app grows.&lt;/p&gt;

&lt;p&gt;Using a full-stack framework with batteries-included, such as &lt;a href="https://wasp.sh" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt; for JavaScript (React, Node.js, Prisma) or &lt;a href="https://laravel.com/" rel="noopener noreferrer"&gt;Laravel&lt;/a&gt; for PHP, takes the complexity out of piecing the different parts of the stack together. Since these frameworks are opinionated, they've chosen a set of tools that work well together, and the have the added benefit of doing a lot of work under-the-hood. In the end, the AI can focus on just the business logic of the app. &lt;/p&gt;

&lt;p&gt;Take Wasp's main config file, for example (see below). All you or the LLM has to do is define your backend operations, and the framework takes care of managing the server setup and configuration for you. On top of that, this config file acts as a central "source of truth" the LLM can always reference to see how the app is defined as it builds new features.&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="nx"&gt;app&lt;/span&gt; &lt;span class="nx"&gt;vibeCodeWasp&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;wasp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;^0.16.3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Vibe Code Workflow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;userEntity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
      &lt;span class="nx"&gt;google&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
      &lt;span class="nx"&gt;github&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;rootComponent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Main&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;@src/main&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;setupFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;QuerySetup&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;@src/config/querySetup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;route&lt;/span&gt; &lt;span class="nx"&gt;LoginRoute&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/login&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Login&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="nx"&gt;Login&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Login&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@src/features/auth/login&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;route&lt;/span&gt; &lt;span class="nx"&gt;EnvelopesRoute&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/envelopes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;EnvelopesPage&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="nx"&gt;EnvelopesPage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;authRequired&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;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;EnvelopesPage&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@src/features/envelopes/EnvelopesPage.tsx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="nx"&gt;getEnvelopes&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getEnvelopes&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@src/features/envelopes/operations.ts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;entities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Envelope&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;BudgetProfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;UserBudgetProfile&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;// Need BudgetProfile to check ownership&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="nx"&gt;createEnvelope&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createEnvelope&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@src/features/envelopes/operations.ts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;entities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Envelope&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;BudgetProfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;UserBudgetProfile&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;// Need BudgetProfile to link&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Getting the Most Out of Your AI Assistant
&lt;/h2&gt;

&lt;p&gt;Once you've got a solid foundation to work with, you need create a comprehensive set of rules for your editor and LLM to follow.&lt;/p&gt;

&lt;p&gt;To arrive at a solid set of rules you need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start building something&lt;/li&gt;
&lt;li&gt;Look out for times when the LLM (repeatedly) &lt;em&gt;doesn't meet your expectations&lt;/em&gt; and define rules for them&lt;/li&gt;
&lt;li&gt;Constantly ask the LLM to help you improve your workflow&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Defining Rules
&lt;/h2&gt;

&lt;p&gt;Different IDE's and coding tools have different naming conventions for the rules you define, but they all function more or less the same way (I used Cursor for this project so I'll be referring to Cursor's conventions here).&lt;/p&gt;

&lt;p&gt;Cursor deprecated their &lt;code&gt;.cursorrules&lt;/code&gt; config file in favor of a  &lt;code&gt;.cursor/rules/&lt;/code&gt; directory with multiple files. In this set of rules, you can pack in general rules that align with your coding style, and project-specific rules (e.g. conventions, operations, auth).&lt;/p&gt;

&lt;p&gt;The key here is to provide structured context for the LLM so that it doesn't have to rely on broader knowledge.&lt;/p&gt;

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

&lt;p&gt;What does that mean exactly? It means telling the LLM about the current project and template you'll be building on, what conventions it should use, and how it should deal with common issues (e.g. the examples picture above, which are taken from the &lt;a href="https://github.com/wasp-lang/vibe-coding-video" rel="noopener noreferrer"&gt;tutorial video's accompanying repo&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;You can also add general strategies to rules files that you can manually reference in chat windows. For example, I often like telling the LLM to "think about 3 different strategies/approaches, pick the best one, and give your rationale for why you chose it." So I created a rule for it, &lt;code&gt;7-possible-solutions-thinking.mdc&lt;/code&gt;, and I pass it in whenever I want to use it, saving myself from typing the same thing over and over. &lt;/p&gt;

&lt;h2&gt;
  
  
  Using AI to Critique and Improve Your Workflow
&lt;/h2&gt;

&lt;p&gt;Aside from this, I view the set of rules as a fluid object. As I worked on my apps, I started with a set of rules and iterated on them to get the kind of output I was looking for. This meant adding new rules to deal with common errors the LLM would introduce, or to overcome project-specific issues that didn't meet the general expectations of the LLM. &lt;/p&gt;

&lt;p&gt;As I amended these rules, I would also take time to use the LLM as a source of feedback, asking it to critique my current workflow and find ways I could improve it. &lt;/p&gt;

&lt;p&gt;This meant passing in my rules files into context, along with other documents like Plans and READMEs, and ask it to look for areas where we could improve them, using the past chat sessions as context as well.&lt;/p&gt;

&lt;p&gt;A lot of time this just means asking the LLM something like: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can you review  for breadth and clarity and think of a few ways it could be improved, if necessary. Remember, these documents are to be used as context for AI-assisted coding workflows.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 3: Defining the "What" and the "How" (PRD &amp;amp; Plan)
&lt;/h2&gt;

&lt;p&gt;An extremely important step in all this is the initial prompts you use to guide the generation of the Product Requirement Doc (PRD) and the step-by-step actionable plan you create from it.&lt;/p&gt;

&lt;p&gt;The PRD is basically just a detailed guideline for how the app should look and behave, and some guidelines for how it should be implemented.&lt;/p&gt;

&lt;p&gt;After generating the PRD, we ask the LLM to generate a step-by-step actionable plan that will implement the app in phases using a modified &lt;strong&gt;vertical slice method&lt;/strong&gt; suitable for LLM-assisted development.&lt;/p&gt;

&lt;p&gt;The vertical slice implementation is important because it instructs the LLM to develop the app in full-stack "slices" -- from DB to UI -- in increasingly complexity. That might look like developing a super simple version of a full-stack feature in an early phase, and then adding more complexity to that feature in the later phases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This approach highlights a common recurring theme in this workflow: build a simple, solid foundation and increasing add on complexity in focused chunks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After the initial generation of each of these docs, I will often ask the LLM to review it's own work and look for possible ways to improve the documents based on the project structure and the fact that it will be used for assisted coding. Sometimes it finds seem interesting improvements, or at the very least it finds redundant information it can remove.&lt;/p&gt;

&lt;p&gt;Here is an example prompt for generating the step-by-step plan (all example prompts used in the walkthrough video can be found in the &lt;a href="https://github.com/wasp-lang/vibe-coding-video/" rel="noopener noreferrer"&gt;accompanying repo&lt;/a&gt;):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;From this PRD, create an actionable, step-by-step plan using a modified vertical slice implmentation approach that's suitable for LLM-assisted coding. Before you create the plan, think about a few different plan styles that would be suitable for this project and the implmentation style before selecting the best one. Give your reasoning for why you think we should use this plan style. Remember that we will constantly refer to this plan to guide our coding implementation so it should be well structured, concise, and actionable, while still providing enough information to guide the LLM.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Finding this tutorial interesting?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://wasp.sh/" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt; team is working hard to create content like this, not to mention building a modern, open-source React/NodeJS framework.&lt;/p&gt;

&lt;p&gt;The easiest way to show your support is just to star Wasp repo! 🐝 But it would be greatly appreciated if you could take a look at the &lt;a href="https://github.com/wasp-lang/wasp" rel="noopener noreferrer"&gt;repository&lt;/a&gt; (for contributions, or to simply test the product). Click on the button below to give Wasp a star and show your support!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faxqiv01tl1pha9ougp21.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faxqiv01tl1pha9ougp21.gif" alt="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/axqiv01tl1pha9ougp21.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/wasp-lang/wasp" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;⭐️ Thank You For Your Support 💪&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Building End-to-End - Vertical Slices in Action
&lt;/h2&gt;

&lt;p&gt;As mentioned above, the vertical slice approach lends itself well to building with full-stack frameworks because of the heavy-lifting they can do for you and the LLM.&lt;/p&gt;

&lt;p&gt;Rather than trying to define all your database models from the start, for example, this approach tackles the simplest form of a full-stack feature individually, and then builds upon them in later phases. This means, in an early phase, we might only define the database models needed for Authentication, then its related server-side functions, and the UI for it like Login forms and pages. &lt;/p&gt;

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

&lt;p&gt;In my Wasp project, that flow for implementing a phase/feature looked a lot like: &lt;br&gt;
-&amp;gt; Define necessary DB entities in &lt;code&gt;schema.prisma&lt;/code&gt; for that feature only&lt;br&gt;
-&amp;gt; Define operations in the &lt;code&gt;main.wasp&lt;/code&gt; file&lt;br&gt;
-&amp;gt; Write the server operations logic &lt;br&gt;
-&amp;gt; Define pages/routes in the &lt;code&gt;main.wasp&lt;/code&gt; file&lt;br&gt;
-&amp;gt; src/features or src/components UI &lt;br&gt;
-&amp;gt; Connect things via Wasp hooks and other library hooks and modules (react-router-dom, recharts, tanstack-table).&lt;/p&gt;

&lt;p&gt;This gave me and the LLM a huge advantage in being able to build the app incrementally without getting too bogged down by the amount of complexity.&lt;/p&gt;

&lt;p&gt;Once the basis for these features was working smoothly, we could improve the complexity of them, and add on other sub-features, with little to no issues!&lt;/p&gt;

&lt;p&gt;The other advantage this had was that, if I realised there was a feature set I wanted to add on later that didn't already exist in the plan, I could ask the LLM to review the plan and find the best time/phase within it to implement it. Sometimes that time was then at the moment, and other times it gave great recommendations for deferring the new feature idea until later. If so, we'd update the plan accordingly.&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 5: Closing the Loop - AI-Assisted Documentation
&lt;/h1&gt;

&lt;p&gt;Documentation often gets pushed to the back burner. But in an AI-assisted workflow, keeping track of why things were built a certain way and how the current implementation works becomes even more crucial. &lt;/p&gt;

&lt;p&gt;The AI doesn't inherently "remember" the context from three phases ago unless you provide it. So we get the LLM to provide it for itself :)&lt;/p&gt;

&lt;p&gt;After completing a significant phase or feature slice defined in our Plan, I made it a habit to task the AI with documenting what we just built. I even created a rule file for this task to make it easier.&lt;/p&gt;

&lt;p&gt;The process looked something like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gather the key files related to the implemented feature (e.g., relevant sections of main.wasp, schema.prisma, the operations.ts file, UI component files).&lt;/li&gt;
&lt;li&gt;Provide the relevant sections of the PRD and the Plan that described the feature.&lt;/li&gt;
&lt;li&gt;Reference the rule file with the Doc creation task&lt;/li&gt;
&lt;li&gt;Have it review the Doc for breadth and clarity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What's important is to have it focus on the core logic, how the different parts connect (DB -&amp;gt; Server -&amp;gt; Client), and any key decisions made, referencing the specific files where the implementation details can be found.&lt;/p&gt;

&lt;p&gt;The AI would then generate a markdown file (or update an existing one) in the &lt;code&gt;ai/docs/&lt;/code&gt; directory, and this is nice for two reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For Humans: It created a clear, human-readable record of the feature for onboarding or future development.&lt;/li&gt;
&lt;li&gt;For the AI: It built up a knowledge base within the project that could be fed back into the AI's context in later stages. This helped maintain consistency and reduced the chances of the AI forgetting previous decisions or implementations.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This "closing the loop" step turns documentation from a chore into a clean way of maintaining the workflow's effectiveness. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Believe the Hype... Just not All of It
&lt;/h2&gt;

&lt;p&gt;So, can you "vibe code" a complex SaaS app in just a few hours? Well, kinda, but it will probably be a boring one. &lt;/p&gt;

&lt;p&gt;But what you can do is leverage AI to significantly augment your development process, build faster, handle complexity more effectively, and maintain better structure in your full-stack projects.&lt;/p&gt;

&lt;p&gt;The "Vibe Coding" workflow I landed on after weeks of testing boils down to these core principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start Strong&lt;/strong&gt;: Use solid foundations like full-stack frameworks (Wasp) and UI libraries (Shadcn-admin) to reduce boilerplate and constrain the problem space for the AI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teach Your AI&lt;/strong&gt;: Create explicit, detailed rules (.cursor/rules/) to guide the AI on project conventions, specific technologies, and common pitfalls. Don't rely on its general knowledge alone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structure the Dialogue&lt;/strong&gt;: Use shared artifacts like a PRD and a step-by-step Plan (developed collaboratively with the AI) to align intent and break down work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slice Vertically&lt;/strong&gt;: Implement features end-to-end in manageable, incremental slices, adding complexity gradually.
Document Continuously: Use the AI to help document features as you build them, maintaining project knowledge for both human and AI collaborators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterate and Refine&lt;/strong&gt;: Treat the rules, plan, and workflow itself as living documents, using the AI to help critique and improve the process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Following this structured approach delivered really good results and I was able to implement features in record time. With this workflow I could really build complex apps 20-50x faster than I could before. &lt;/p&gt;

&lt;p&gt;The fact that you also have a companion that has a huge knowledge set that helps you refine ideas and test assumptions is amazing as well&lt;/p&gt;

&lt;p&gt;Although you can do a lot without ever touching code yourself, it still requires you, the developer, to guide, review, and understand the code. But it is a realistic, effective way to collaborate with AI assistants like Gemini 2.5 Pro in Cursor, moving beyond simple prompts to build full-features apps efficiently.&lt;/p&gt;

&lt;p&gt;If you want to see this workflow in action from start to finish, check out the full &lt;a href="https://www.youtube.com/watch?v=WYzEROo7reY" rel="noopener noreferrer"&gt;~3 hour YouTube walkthrough and template repo&lt;/a&gt;. And if you have any other tips I missed, please let me know in the comments :)&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>ai</category>
      <category>fullstack</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I built my SaaS app fast. Now it's marketing time.</title>
      <dc:creator>vincanger</dc:creator>
      <pubDate>Wed, 26 Feb 2025 15:50:55 +0000</pubDate>
      <link>https://forem.com/wasp/i-built-my-saas-app-fast-now-its-marketing-time-657</link>
      <guid>https://forem.com/wasp/i-built-my-saas-app-fast-now-its-marketing-time-657</guid>
      <description>&lt;p&gt;A few weeks ago, I gave myself the challenge of building and marketing a SaaS app to $100 in 1 month. &lt;/p&gt;

&lt;p&gt;While I've slightly missed the mark since it's taken me ~25 days to build and launch the app, I'm happy to say that the app is now live -- &lt;a href="https://blogbannergpt.xyz" rel="noopener noreferrer"&gt;https://blogbannergpt.xyz&lt;/a&gt; !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blogbannergpt.xyz" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkz578rru9s7a07mdrvez.png" alt="Image description" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What is the app? It's an image generation tool that generates blog banner images based solely on your post's title! &lt;/p&gt;

&lt;p&gt;In fact, &lt;strong&gt;the banner for this blogpost was made with it&lt;/strong&gt;. Cool, right?&lt;/p&gt;

&lt;p&gt;So, now, you might be wondering why I took on this challenge, and it's simple really. &lt;/p&gt;

&lt;p&gt;As developers, we're living in the &lt;strong&gt;golden age&lt;/strong&gt; of solo SaaS app development. With AI-powered coding tools like &lt;a href="https://www.cursor.com/" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;, and batteries-included full-stack frameworks like &lt;a href="https://wasp.sh" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt;, we can launch apps in weeks that used to take a team of developers months. Insane!&lt;/p&gt;

&lt;p&gt;Also, I'm the creator of &lt;a href="https://opensaas.sh" rel="noopener noreferrer"&gt;Open SaaS&lt;/a&gt;, a free, open-source SaaS boilerplate starter, and I’ve been seeing other builders using my boilerplate share their success stories, such as &lt;a href="https://wasp-lang.dev/blog/2024/09/17/from-idea-to-20k-in-days-how-wasp-accelerated-nuloapps-launch" rel="noopener noreferrer"&gt;getting their SaaS apps acquired within a couple weeks&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;So I got &lt;strong&gt;inspired&lt;/strong&gt; to try and build and market more SaaS apps of my own.&lt;/p&gt;

&lt;p&gt;I've been documenting my progress through this self-imposed challenge  on &lt;a href="https://www.tiktok.com/@hot_town_" rel="noopener noreferrer"&gt;TikTok&lt;/a&gt;, where I've built a nice little following so far. I shared all the tips, tricks, and tools I used while building the app.&lt;/p&gt;

&lt;p&gt;Now I'm going to &lt;strong&gt;share my entire marketing journey&lt;/strong&gt; as I try and promote the app and make some real money with it, so &lt;a href="https://www.tiktok.com/@hot_town_" rel="noopener noreferrer"&gt;follow along&lt;/a&gt; if you're interested :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tiktok.com/@hot_town_" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqj5af47r98v5hxzvrrqw.png" alt="Image description" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course, marketing is always a difficult task for a developer, and I don't have a huge social media following. So part of this challenge is to help me build my marketing muscle. And by documenting the entire process via videos and posts, I'll get better at “building in public” and finding marketing channels for the right audiences.&lt;/p&gt;

&lt;p&gt;Here are some of the marketing ideas I'll try out, and post about, in the coming weeks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Direct Emails to potential customers&lt;/li&gt;
&lt;li&gt;Product Hunt launch to help me organize promotion materials and create good messaging&lt;/li&gt;
&lt;li&gt;Reddit replies and maybe some posts -- I have to be careful here to not get seen as direct marketing or spam&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://x.com/@hot_town" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; and &lt;a href="https://www.tiktok.com/@hot_town_" rel="noopener noreferrer"&gt;TikTok&lt;/a&gt; marketing posts on my personal channels.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Come follow along on my journey and see if I make it, or just make a fool of myself :)&lt;/p&gt;

&lt;p&gt;There's never a better time than now to build!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>Can I build &amp; market a SaaS app to $100 in 1 month?</title>
      <dc:creator>vincanger</dc:creator>
      <pubDate>Wed, 15 Jan 2025 12:36:00 +0000</pubDate>
      <link>https://forem.com/wasp/can-i-build-market-a-saas-app-to-100-in-1-month-36e7</link>
      <guid>https://forem.com/wasp/can-i-build-market-a-saas-app-to-100-in-1-month-36e7</guid>
      <description>&lt;p&gt;Everyone’s saying it. We’re living in the golden age for software development. &lt;/p&gt;

&lt;p&gt;With the current suite of tools, it’s getting easier for hackers to create and market their apps. Or, as &lt;a href="https://x.com/mckaywrigley/status/1830753005416915153" rel="noopener noreferrer"&gt;Mckay Wrigley&lt;/a&gt; puts it, what used to take a team of developers, and tons of money, can now be built be a single developer using Cursor.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1830753005416915153-483" src="https://platform.twitter.com/embed/Tweet.html?id=1830753005416915153"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1830753005416915153-483');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1830753005416915153&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I agree, although I do think the claims are a tad bit exaggerated, I believe we will see many more solo-developers building profitable businesses, either as side projects, or as their main focus.&lt;/p&gt;

&lt;p&gt;In fact, as the creator and maintainer of &lt;a href="https://opensaas.sh" rel="noopener noreferrer"&gt;Open SaaS&lt;/a&gt;, a free, open-source SaaS starter, I’m seeing this first hand. Builders using Open SaaS are sharing their success stories, such as &lt;a href="https://wasp-lang.dev/blog/2024/09/17/from-idea-to-20k-in-days-how-wasp-accelerated-nuloapps-launch" rel="noopener noreferrer"&gt;getting their SaaS apps acquired within a couple weeks&lt;/a&gt; of building it. &lt;/p&gt;

&lt;p&gt;It’s pretty amazing, to be honest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opensaas.sh" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3ibdi07e8szi8irdozt.png" alt="Image description" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But not only has the success of my fellow builders impressed me, it’s also inspired me. And it’s motivating me to challenge myself to do the same. So here’s what I have planned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I am going to challenge myself to build and market a SaaS app to $100 dollars within about 1 month.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The best part is, I am going to document the process almost in its entirety, by live-streaming all my coding and marketing sessions, as well as posting summaries to social media. So if you want to follow my journey, check out the following profiles&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/hot_town" rel="noopener noreferrer"&gt;x.com/hot_town&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tiktok.com/@hot_town_" rel="noopener noreferrer"&gt;tiktok.com/@hot_town_&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://youtube.com/@wasplang" rel="noopener noreferrer"&gt;youtube.com/@wasplang&lt;/a&gt; (where I’ll be live-streaming)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://tiktok.com/@hot_town_" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fryempimjbmsewukvf6rm.png" alt="Image description" width="800" height="886"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this challenge, I am going to use my &lt;a href="https://opensaas.sh" rel="noopener noreferrer"&gt;Open SaaS&lt;/a&gt; template as a starting point. I’m also assuming the app will use some AI capabilities, such as OpenAI’s API, and maybe Flux image generation via &lt;a href="http://Replicate.com" rel="noopener noreferrer"&gt;Replicate.com&lt;/a&gt;. But, for now, I still haven’t settled on a concrete app idea (I’ll probably have this figured out by day 1 of the challenge).&lt;/p&gt;

&lt;p&gt;Now, it should be known that this type of challenge isn’t really something new. &lt;a href="https://levels.io/12-startups-12-months/" rel="noopener noreferrer"&gt;Peter Levels (aka levelsio)&lt;/a&gt; did this back in 2014 before the rise of LLMs with his &lt;em&gt;12 startups in 12 months&lt;/em&gt; challenge. His reasons for pursuing this idea were that he wanted to get into the habit of just shipping stuff and iterating quickly on his ideas to figure out which ones have potential, and to get out of the habit of ruminating too long on any single app.&lt;/p&gt;

&lt;p&gt;For me, I also want to push myself to build and launch more, but I also want to put the current tools to the test and see if it’s really possible to be a 1000x engineer in the age of AI. That’s why I’ll be using the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.cursor.com/" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; — AI code editor&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.anthropic.com/news/claude-3-5-sonnet" rel="noopener noreferrer"&gt;Claude 3.5 sonnet&lt;/a&gt; — Top notch LLM for coding&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://opensaas.sh" rel="noopener noreferrer"&gt;Open SaaS&lt;/a&gt; — Open-source SaaS starter w/ Stripe, AWS S3, Admin dashboard, …&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://wasp.sh" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt; — The Batteries-included React, NodeJS, &amp;amp; Prisma framework that Open SaaS is built on top of&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://platform.openai.com/docs/overview" rel="noopener noreferrer"&gt;OpenAI API&lt;/a&gt; — For the “GPT Wrapper” side of things&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://Replicate.com" rel="noopener noreferrer"&gt;Replicate.com&lt;/a&gt; — API for other open-source AI models (LLMs, Image gen, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not only will this challenge help me launch more, but it will also help build my marketing muscle. &lt;strong&gt;I unfortunately don't have hundreds of thousands of twitter or tiktok followers&lt;/strong&gt;, so I'm gonna really have to get my hands dirty and do some grassroots marketing. And by documenting the entire process via streams, video, and posts, it’ll help me get better at “building in public” and finding marketing channels for the right audiences. &lt;/p&gt;

&lt;p&gt;I should mention that I’m not stranger to building profitable SaaS apps, as &lt;a href="https://coverlettergpt.xyz" rel="noopener noreferrer"&gt;I already have an open-source SaaS app that makes ~$550 MRR&lt;/a&gt;. So the nice thing about this challenge will be to see if I just got lucky the first time, or if I have it in me to bring a good idea to life and market it effectively again.&lt;/p&gt;

&lt;p&gt;Well, I’ll just have to get to work and see. Come follow along as I do!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>saas</category>
      <category>marketing</category>
      <category>ai</category>
    </item>
    <item>
      <title>Very proud to be the creator of one of the most popular open source SaaS starters</title>
      <dc:creator>vincanger</dc:creator>
      <pubDate>Wed, 11 Dec 2024 13:42:07 +0000</pubDate>
      <link>https://forem.com/vincanger/very-proud-to-be-the-creator-of-one-of-the-most-popular-open-source-saas-starters-3cpk</link>
      <guid>https://forem.com/vincanger/very-proud-to-be-the-creator-of-one-of-the-most-popular-open-source-saas-starters-3cpk</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/wasp" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F3369%2Fc86918f8-76a9-4b01-accf-cc257f9ee56f.png" alt="Wasp" width="151" height="151"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F331796%2F5d3fd56d-440c-437c-bcda-152c482774b9.jpeg" alt="" width="460" height="460"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/wasp/should-you-use-an-open-source-saas-boilerplate-starter-or-a-300-paid-one-48ea" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Should You Use an Open-source SaaS Boilerplate Starter or a $300+ Paid One?&lt;/h2&gt;
      &lt;h3&gt;Matija Sosic for Wasp ・ Dec 11&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>How a solo dev quickly built and sold his SaaS app for $20k 🏃‍♂️💰</title>
      <dc:creator>vincanger</dc:creator>
      <pubDate>Thu, 14 Nov 2024 13:42:31 +0000</pubDate>
      <link>https://forem.com/wasp/how-a-solo-dev-quickly-built-and-sold-his-saas-app-for-20k-bpe</link>
      <guid>https://forem.com/wasp/how-a-solo-dev-quickly-built-and-sold-his-saas-app-for-20k-bpe</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR Build Fast, Sell Faster
&lt;/h2&gt;

&lt;p&gt;You've probably seen tons of stories online of successful devs who build a SaaS app and starting brining in the money. &lt;/p&gt;

&lt;p&gt;Well, we've got another one for you.&lt;/p&gt;

&lt;p&gt;And we're not sharing this story with you to make you feel bad, but rather &lt;strong&gt;to inspire you&lt;/strong&gt; and tell you about the dev tools that made it all possible. &lt;/p&gt;

&lt;p&gt;First of all, depending on who you are $20,000 may seem like a small amount of money, considering apps are often valued for millions of dollars in the tech world. But for others, $20k can be life changing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih2d4kt37awm0tgf6a2u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih2d4kt37awm0tgf6a2u.png" alt="Image description" width="480" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Regardless, each story has some value in it, and this story in particular highlights a few great strategies in selling a small SaaS app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build fast with the right tools.&lt;/li&gt;
&lt;li&gt;Be bold and make your product public ASAP.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the simple story of Kaloyan and how he built and sold NuloApp in a matter of weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Dev Behind the App
&lt;/h2&gt;

&lt;p&gt;Meet &lt;a href="https://www.linkedin.com/in/kaloyan-stoyanov-466a54196/" rel="noopener noreferrer"&gt;&lt;strong&gt;Kaloyan Stoyanov&lt;/strong&gt;&lt;/a&gt;, a tech lead by day, and a tinkerer and indiehacker by night who built and sold &lt;a href="https://nuloapp.com/" rel="noopener noreferrer"&gt;NuloApp&lt;/a&gt; a few days after making it public.&lt;/p&gt;

&lt;p&gt;A year before officially launching &lt;a href="https://nuloapp.com/" rel="noopener noreferrer"&gt;NuloApp&lt;/a&gt;, Kaloyan was diving into the world of "&lt;a href="https://elevenlabs.io/blog/how-to-create-a-faceless-youtube-channel" rel="noopener noreferrer"&gt;faceless YouTube channels&lt;/a&gt;", those social media accounts that post short, simple, sometimes AI-narrated videos. Kaloyan wanted to start his own channel, but noticed that the common tools to generate short-form content from long-form videos, such as &lt;a href="http://opus.pro/" rel="noopener noreferrer"&gt;Opus.pro&lt;/a&gt;, &lt;strong&gt;were very expensive&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Seeing how expensive these tools were, Kaloyan decided to take matters into his own hands, building his own tool in just a month.&lt;/p&gt;

&lt;p&gt;Initially, his tool automatically created and uploaded shorts, but after some time, when his channel didn’t pick up, he stopped the project. Fast forward to a year later, and YouTube's algorithm brought similar content back into his feed, reigniting his drive. &lt;/p&gt;

&lt;p&gt;This time, Kaloyan took it further by transforming his tool into a SaaS product: &lt;a href="https://nuloapp.com/" rel="noopener noreferrer"&gt;NuloApp&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb2dsgye2ck0cfhtqppqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb2dsgye2ck0cfhtqppqn.png" alt="Image description" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Before We Begin
&lt;/h3&gt;

&lt;p&gt;We’re working hard at &lt;a href="https://wasp-lang.dev" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt; to help you build web apps as easily as possible, including creating inspiring content like this!&lt;/p&gt;

&lt;p&gt;The easiest way to support our entirely free, open-source efforts is by starring our repo on GitHub: &lt;a href="https://www.github.com/wasp-lang/wasp" rel="noopener noreferrer"&gt;https://www.github.com/wasp-lang/wasp&lt;/a&gt; 🙏&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fobmif6mth667r53m3kgj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fobmif6mth667r53m3kgj.gif" alt="Image description" width="350" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/wasp-lang/wasp" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐️ Star Wasp on GitHub 🙏&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  All about NuloApp
&lt;/h2&gt;

&lt;p&gt;NuloApp is an AI-assisted tool designed to make video content creation simpler by converting long-form videos into short clips that have the highest chance to capture audience’s attention. &lt;/p&gt;

&lt;p&gt;It automatically resizes and captions content from horizontal (landscape) to vertical (portrait) for platforms like YouTube Shorts, Instagram Reels, and TikTok, helping creators push content faster. &lt;a href="https://output.sfo3.cdn.digitaloceanspaces.com/nulo/video_resized.mp4" rel="noopener noreferrer"&gt;Here's an example video&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech Stack Overview
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full-stack framework:&lt;/strong&gt; &lt;a href="https://wasp-lang.dev" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payment integration:&lt;/strong&gt; Stripe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other tools:&lt;/strong&gt; OpenCV, FastAPI, Meta's llama, OpenAI's Whisper, LangChain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; PostgreSQL&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Programatically Editing Videos&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The real genius behind NuloApp is the way that Kaloyan combined a number of tools to programatically edit the longer form videos and podcasts, into short, engaging clips for social media. &lt;/p&gt;

&lt;p&gt;First of all, &lt;a href="https://opencv.org/" rel="noopener noreferrer"&gt;OpenCV&lt;/a&gt;, an open-source computer vision library, was used as the main editing tool. This is how NuloApp is able to get the correct aspect ratio for smartphone content, and do other cool things like centering the video on the speaker so that they aren't out of frame when the aspect ratio is changed. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsv9jbwaks6sauhl1ds8i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsv9jbwaks6sauhl1ds8i.png" alt="Image description" width="579" height="681"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In order to programtically get the correct clips to be extracted, AI tools like Meta's &lt;a href="https://github.com/meta-llama/llama3" rel="noopener noreferrer"&gt;llama-3-70b LLM&lt;/a&gt; and OpenAI's &lt;a href="https://github.com/openai/whisper" rel="noopener noreferrer"&gt;Whisper&lt;/a&gt; were also used. Whisper allowed for fast speech-to-text transcription, which could then be passed on the llama in order to find the segments worth extracting. &lt;/p&gt;

&lt;p&gt;Putting these tools together and accessible via a standalone API was the final step in this process. But this really clever combination of tools was just one part of puzzle. The next problem to solve was how to deliver it all as a SaaS app that users could pay for?&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Wasp?
&lt;/h3&gt;

&lt;p&gt;When Kaloyan decided to relaunch his tool as a SaaS product, he didn’t have time to spare. He needed a framework that would allow him to build and deploy quickly. That’s where &lt;strong&gt;&lt;a href="https://wasp-lang.dev" rel="noopener noreferrer"&gt;Wasp&lt;/a&gt;&lt;/strong&gt; came in.&lt;/p&gt;

&lt;p&gt;“I was looking for a quick and easy-to-use boilerplate with most SaaS app features already pre-built so I could deploy faster,” says Kaloyan. &lt;a href="https://opensaas.sh/" rel="noopener noreferrer"&gt;Wasp’s open-source SaaS boilerplate starter&lt;/a&gt;, with well-structured documentation, alongside its responsive Discord support, made it the ideal choice.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Impact of Wasp on Development
&lt;/h3&gt;

&lt;p&gt;Kaloyan was particularly impressed with how Wasp simplified complex tasks that would normally take much longer to implement. From setting up Google logins and dark mode switches to creating hourly jobs, the development process was smoother than expected. “Everything from enabling Google logins to creating hourly jobs I badly needed was way too easy to set up”.&lt;/p&gt;

&lt;p&gt;If you're considering Wasp, Kaloyan’s advice is clear: Wasp is easy to get started with and flexible enough to build what you need without adding unnecessary complexity. For Kaloyan, Wasp was ideal because it handled the boilerplate while still giving him the freedom to customize as required. "The documentation is also solid, which definitely helps when you're moving quickly.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Auth and Stripe Integration Made Easy
&lt;/h3&gt;

&lt;p&gt;One of Kaloyan’s least favorite tasks as a developer is building out authentication systems, and he found that even implementing third-party libraries could be frustrating. Fortunately, &lt;a href="https://opensaas.sh" rel="noopener noreferrer"&gt;Wasp’s boilerplate&lt;/a&gt; made the process of setting up authentication and pre-configuring Stripe for payments seamless. &lt;/p&gt;

&lt;p&gt;Here's what &lt;code&gt;wasp.config&lt;/code&gt; file looks like, through which you can define full-stack auth in a Wasp app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="nx"&gt;myApp&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;wasp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;^0.14.0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// 1. Specify the User entity&lt;/span&gt;
    &lt;span class="nl"&gt;userEntity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// 2. Enable Github Auth&lt;/span&gt;
      &lt;span class="nl"&gt;gitHub&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
      &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// 3. Specify the email from field&lt;/span&gt;
        &lt;span class="nl"&gt;fromField&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My App Postman&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello@itsme.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="c1"&gt;// 4. Specify the email verification and password reset options&lt;/span&gt;
        &lt;span class="nx"&gt;emailVerification&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;clientRoute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;EmailVerificationRoute&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//this route/page should be created&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="nx"&gt;passwordReset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;clientRoute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PasswordResetRoute&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//this route/page should be created&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="c1"&gt;// Add an emailSender -- Dummy just logs to console for dev purposes&lt;/span&gt;
        &lt;span class="c1"&gt;// but there are a ton of supported providers :D&lt;/span&gt;
        &lt;span class="nx"&gt;emailSender&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Dummy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nx"&gt;onAuthFailedRedirectTo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/login&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here's a 1 minute demo:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Qiro77q-ulI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Additionally, the framework's job scheduling features helped Kaloyan avoid the headache of configuring cron jobs on Docker containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fast Acquisition: From Launch to Sale in 24 Hours
&lt;/h2&gt;

&lt;p&gt;Upon launching NuloApp, Kaloyan listed the product on &lt;a href="http://acquire.com/" rel="noopener noreferrer"&gt;Acquire&lt;/a&gt; with the primary goal of gathering feedback from potential buyers about what features or metrics they value most in a SaaS product. &lt;/p&gt;

&lt;p&gt;To his surprise, &lt;strong&gt;within the first day of listing, he received multiple offers&lt;/strong&gt;. After a brief meeting with one interested buyer, they quickly agreed on a $20k deal, validating the product's value and market potential.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74mcd4gjis5rdopjd9nf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74mcd4gjis5rdopjd9nf.png" alt="NuloApp Homepage" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;If you’d like to follow in Kaloyan’s footsteps, this is how to get started with the boilerplate he used.&lt;/p&gt;

&lt;p&gt;Open your terminal and install Wasp:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; https://get.wasp-lang.dev/installer.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From there you only need to run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wasp new &lt;span class="nt"&gt;-t&lt;/span&gt; saas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it, you’re one step closer to building your first SaaS!&lt;/p&gt;

&lt;h2&gt;
  
  
  Join us, friend!
&lt;/h2&gt;

&lt;p&gt;So there you have it. Another success story. And it won't be the last!&lt;/p&gt;

&lt;p&gt;That's because we've got a strong &lt;a href="https://discord.gg/rzdnErX" rel="noopener noreferrer"&gt;Discord community&lt;/a&gt; of indiehackers and solo devs building successful SaaS apps in their free time. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6l4zkp0xy4l92bhd2urn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6l4zkp0xy4l92bhd2urn.png" alt="Image description" width="800" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://discord.gg/rzdnErX" rel="noopener noreferrer"&gt;Join us&lt;/a&gt; if you've got questions, are looking for inspiration, or want to share what you're building. Who knows, maybe you and your app will be featured in a future blog post just like this one?&lt;/p&gt;

&lt;p&gt;Thanks, and see you next week.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1z22ojhnovdur6n12mow.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1z22ojhnovdur6n12mow.gif" alt="https://media1.giphy.com/media/ZfK4cXKJTTay1Ava29/giphy.gif?cid=7941fdc6pmqo30ll0e4rzdiisbtagx97sx5t0znx4lk0auju&amp;amp;ep=v1_gifs_search&amp;amp;rid=giphy.gif&amp;amp;ct=g" width="480" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Making the most annoying cookie banners we could think of 🍪🤬</title>
      <dc:creator>vincanger</dc:creator>
      <pubDate>Tue, 22 Oct 2024 14:43:44 +0000</pubDate>
      <link>https://forem.com/wasp/making-the-most-annoying-cookie-banners-we-could-think-of-426e</link>
      <guid>https://forem.com/wasp/making-the-most-annoying-cookie-banners-we-could-think-of-426e</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ae5obtnvahw1hxii8n8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ae5obtnvahw1hxii8n8.gif" alt="Image description" width="440" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dark patterns in web UX are design features that are subtly designed to get the user to perform a specific action. &lt;/p&gt;

&lt;p&gt;Cookie consent banners are one of the classic examples of dark patterns because they &lt;em&gt;want&lt;/em&gt; the user to click &lt;strong&gt;accept&lt;/strong&gt;, so they make rejecting them as annoying and tedious as possible.&lt;/p&gt;

&lt;p&gt;Considering this, we wanted to see how blatantly annoying we could make cookie consent banners, which is why we set up &lt;a href="https://docs.opensaas.sh/blog" rel="noopener noreferrer"&gt;THE MOST ANNOYING COOKIE BANNER HACKATHON&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;With the deadline past, and submissions now in, we thought we'd present you with a showcase of some of the cookie banners our participants came up with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;BTW, We're allowing the community to vote on winners in an elimination style tournament on &lt;a href="https://x.com/wasplang" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt;, starting Wednesday October 23rd.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbhguxeejsea317gp7nc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbhguxeejsea317gp7nc.png" alt="Image description" width="612" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/wasplang" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;🗳 Vote for the winners 🏆&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Everyday we will post two cookie banners and you get to vote for who you think should move on to the next round&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Participant Showcase
&lt;/h2&gt;

&lt;p&gt;Below are a handful of the submissions our participants conjured up. Click the links to visit the sites and try them out yourself!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackblitz.com/edit/vitejs-vite-88gw4c?embed=1&amp;amp;file=src%2Flanding-page%2Fcomponents%2FCookieConsentBanner.tsx&amp;amp;view=preview" rel="noopener noreferrer"&gt;Windows of Time&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3c9yoylzx07ez6t4ry5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3c9yoylzx07ez6t4ry5.gif" alt="Image description" width="360" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackblitz.com/github/fecony/annoying-cookie-2?embed=1&amp;amp;file=src%2Flanding-page%2Fcomponents%2FCookieConsentBanner%2FCookieConsentBanner.tsx&amp;amp;hideExplorer=1&amp;amp;view=preview" rel="noopener noreferrer"&gt;Find all the Cookies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj40ktn620k9r6vqybr7i.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj40ktn620k9r6vqybr7i.gif" alt="Image description" width="360" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vitejs-vite-ykscfb.vercel.app/" rel="noopener noreferrer"&gt;Gangnam Style Match the Beat&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvfrexo7u52lq4by590sd.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvfrexo7u52lq4by590sd.gif" alt="Image description" width="360" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://stackblitz.com/edit/vitejs-vite-voqgjo?file=src%2Flanding-page%2Fcomponents%2FCookieConsentBanner.tsx" rel="noopener noreferrer"&gt;The GDPR Cookie regulations quiz&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkt6uy7xesr3r535v9q0a.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkt6uy7xesr3r535v9q0a.gif" alt="Image description" width="360" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackblitz.com/edit/vitejs-vite-d6rkv6?embed=1&amp;amp;file=src%2Flanding-page%2Fcomponents%2FPreferencesDialog.tsx" rel="noopener noreferrer"&gt;The Impossible Captcha&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgao04hzy58kmz9v7fi4m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgao04hzy58kmz9v7fi4m.png" alt="Image description" width="800" height="1068"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackblitz.com/github/kevinshu1995/annoying-cookie-banner?embed=1&amp;amp;file=README.md" rel="noopener noreferrer"&gt;Find the ball to reject cookies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2onf8k6mtv7ggygn6a7a.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2onf8k6mtv7ggygn6a7a.gif" alt="Image description" width="360" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackblitz.com/~/github.com/wardbox/vitejs-vite-u4mdna" rel="noopener noreferrer"&gt;The Cookie Consent Application Process&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkvatbw1c9r10tnn5eya6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkvatbw1c9r10tnn5eya6.png" width="800" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackblitz.com/edit/vitejs-vite-8jhmgq?embed=1&amp;amp;file=src%2Flanding-page%2Fcomponents%2FCookieConsentBanner.tsx" rel="noopener noreferrer"&gt;Fresh batch of cookies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmc5jguf84bgplvlyln98.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmc5jguf84bgplvlyln98.gif" alt="Image description" width="360" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://annoying-cookie-banner.vercel.app/" rel="noopener noreferrer"&gt;Do some math &amp;amp; quiz about the Big Bang Theory show&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F13rjwyi2y4q1hi5vqt9k.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F13rjwyi2y4q1hi5vqt9k.gif" alt="Image description" width="360" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackblitz.com/edit/vitejs-vite-r3fypn?embed=1&amp;amp;file=src%2Flanding-page%2Fcomponents%2FCookieConsentBanner.tsx&amp;amp;hideExplorer=1&amp;amp;view=preview" rel="noopener noreferrer"&gt;We don't even use cookies, but here's a cookie banner anyway&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiuha1shnxa1ifvnipqf3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiuha1shnxa1ifvnipqf3.png" alt="Image description" width="800" height="1016"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Cast your vote
&lt;/h2&gt;

&lt;p&gt;Don't forget, we're allowing the community to vote on winners in an elimination style tournament on &lt;a href="https://x.com/wasplang" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt;, starting Wednesday October 23rd.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbhguxeejsea317gp7nc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbhguxeejsea317gp7nc.png" alt="Image description" width="612" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everyday we will post two cookie banners and you get to vote for who you think should move on to the next round&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/wasplang" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;🗳 Vote for the winners 🏆&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>cookies</category>
      <category>react</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
