The Verge just launched a whole series about vibe coding — AI-generated apps built by non-programmers — and the internet has opinions. Some people are shipping working SaaS products in a weekend. Others have produced unmaintainable spaghetti that collapses the moment requirements change.

I’ve been vibe coding on and off since 2025. I’ve built 12 projects with AI-first approaches: 6 worked great, 3 kind of worked, 3 were complete disasters. Here’s what I’ve learned about when vibe coding actually delivers and when you should walk away.
What “Vibe Coding” Actually Means in 2026
The term got popularized by Andrej Karpathy in early 2025, but the practice has evolved significantly since then. In 2026, vibe coding means using AI agents (Claude Code, Codex, Cursor Agent Mode) to generate entire applications from natural language descriptions, with the human mostly guiding direction rather than writing code.
It’s not just “AI autocomplete on steroids.” The modern version involves multi-file generation, automated testing, deployment scripts, and sometimes even infrastructure-as-code — all from conversation.
The key distinction: vibe coding isn’t about whether AI writes the code. It’s about whether the human understands what the code does. When I vibe code, I read every line the AI generates before accepting it. I might not have written it, but I know what it does.
The Projects That Actually Shipped
Winner #1: The Internal Dashboard (3 hours)
I needed a dashboard to track API usage across multiple projects. Claude Code generated a React + Flask app with real-time charts in about 3 hours of back-and-forth. I described the data schema, it built the queries, the API, and the frontend.
Why it worked: the requirements were CRUD-based and well-defined. Charts, tables, filters — this is the kind of thing AI is genuinely good at. No edge cases, no weird business logic, just “show me data in a pretty way.”
Winner #2: The CLI Tool (45 minutes)
A Python CLI to batch-process markdown files into WordPress posts. I described the workflow: read files with YAML frontmatter, convert to HTML, upload via REST API. Claude Code built it in one shot, with proper error handling and a dry-run mode I didn’t even ask for.
Why it worked: when your requirements are essentially “do this thing I already know how to do, but in code,” AI is incredible. You’re not asking it to design anything — just translate.
Winner #3: The Landing Page (2 hours)
Static site, dark theme, responsive, with a contact form. Cursor Agent Mode generated the whole thing from a screenshot reference.
Why it worked: frontend layout is pattern-matching, and AI has seen millions of landing pages. The form was trivial (Netlify Forms). No complex state, no weird interactions.
The Projects That Kind of Worked
Meh #1: The Browser Extension (6 hours, ongoing maintenance)
A Chrome extension that summarizes web pages using the Gemini API. It worked within 2 hours, but I’ve spent 4 more hours fixing edge cases — manifest v3 quirks, content script injection timing, storage API limits.
Why it was “meh”: browser extensions have platform-specific constraints that AI doesn’t always get right. It generates code that looks correct but fails silently in production. You need enough domain knowledge to debug.
Meh #2: The Discord Bot (4 hours)
Discord bot with slash commands for querying my blog’s RSS feed. The bot worked, but moderation features, rate limiting, and error recovery all needed manual intervention.
The AI understood the happy path perfectly. It did not understand “what happens when Discord rate-limits you” or “what if someone spams the command 500 times.”
The Complete Disasters
Disaster #1: The Real-Time Collaboration Tool (abandoned after 12 hours)
I tried to build a Google Docs clone with real-time collaboration. WebSockets, operational transforms, conflict resolution. Claude Code confidently generated hundreds of lines of code that looked correct but had race conditions everywhere.
WebSockets and concurrent state management are areas where AI confidently produces wrong answers. The code compiles, runs, and silently corrupts data. If you don’t understand operational transforms yourself, you will not catch the bugs.
Disaster #2: The Multi-Tenant SaaS (abandoned after 8 hours)
Multi-tenancy, subscription billing with Stripe, role-based access control. Again, Claude Code generated mountains of confident-looking code. The auth system had subtle security holes (JWT tokens without proper expiration handling, a middleware ordering bug that made certain routes bypass auth completely).
Disaster #3: The Mobile App (abandoned after 4 hours)
React Native app using Expo. The generated code used deprecated APIs, had layout issues on Android that didn’t appear on iOS, and the navigation setup was a tangled mess.
The Patterns: When Vibe Coding Works
After 12 projects, clear patterns emerged. Here’s when vibe coding reliably works:
✅ CRUD apps with simple business logic. Dashboards, admin panels, simple APIs. AI has seen a million of these.
✅ Static websites and landing pages. Layout generation is pattern matching. AI excels.
✅ CLI tools and scripts. Single-purpose, well-defined input/output. The sweet spot.
✅ Data processing pipelines. Transform this CSV into that format. AI is great at this.
✅ Code translations. Convert this Python script to TypeScript. Mechanical, well-understood.
And when it doesn’t:
❌ Real-time collaborative systems. WebSockets, CRDTs, operational transforms — AI generates correct-looking but subtly broken code.
❌ Multi-tenant SaaS with auth. Security edge cases require deep understanding AI doesn’t have.
❌ Mobile apps. Platform-specific quirks, deprecated APIs, and layout issues that vary by device.
❌ Anything requiring deep domain knowledge. If you couldn’t build it yourself slowly, you can’t vibe code it.
❌ Performance-critical systems. AI optimizes for correctness, not speed. Generated code often makes naive algorithmic choices.
The Rules I Follow Now
After burning myself enough times, I have a checklist:
1. Read every line. Vibe coding is not “trust the AI blindly.” It’s “use AI to write the first draft, then review like you’re doing a code review for a junior developer.”
2. Start with tests. Before letting the AI generate implementation, ask it to generate test cases. This forces you to think about edge cases early and gives you a safety net.
3. Build in small chunks. Never ask for “build the whole app.” Ask for “build the auth system,” verify it works, then move to the next feature.
4. Know when to switch to manual. If the AI has made three attempts at something and it’s still broken, write it yourself. You’re spending more time debugging AI code than you’d spend writing it from scratch.
5. Keep it simple. Vibe coding works best for simple apps with straightforward requirements. The moment complexity compounds (auth + real-time + multi-tenancy + payment), step back.
Is Vibe Coding “Real” Programming?
Here’s my honest take: yes and no.
Vibe coding is real programming the same way using a calculator is real math. The calculator does the computation, but you need to know what operation to perform and verify the answer makes sense. If you give the wrong input, you get the wrong output — garbage in, garbage out.
The developers who succeed at vibe coding are the ones who already know how to code. They use AI to go faster, not to skip understanding. The people who treat it as “I don’t need to learn to code anymore” are the ones who end up with unmaintainable disasters.
In 2026, vibe coding is a force multiplier for competent developers. It’s not a replacement for competence.