Mo Tawfik Khalifa · Product leader and builder
All notes

Vibe coding: what it is, where it breaks, and how to ship it safely

7 min read · Mo Tawfik Khalifa
Try it below

Vibe coding is building software by describing what you want to an AI and accepting the code it writes, without reading it line by line. It is the fastest way yet to get from an idea to a working prototype, and the code still needs an engineer’s eyes before real people, real data and real money touch it.

I ship with AI at every step, and I built a live app on my own with AI doing the typing. This is what I have learned about the gap between the vibe and production.

What is vibe coding?

Andrej Karpathy coined the term in a post on 2 February 2025: a new kind of coding where you “forget that the code even exists”. He accepted every change without reading the diffs, pasted error messages straight back to the AI, and said it was fine for throwaway weekend projects. Nine months later, Collins named vibe coding its Word of the Year 2025.

Most professional developers keep their distance. In the Stack Overflow 2025 Developer Survey (July 2025), 72% of respondents said vibe coding is not part of their professional development work and another 5% said so emphatically, while 84% use or plan to use AI tools. The difference is ownership: AI-assisted engineering means someone reads the code, tests it and answers for it. Vibe coding means nobody does.

What tools do people use for vibe coding?

Two kinds, and many people use both.

Underneath, most vibe-coded apps land on the same few services: a hosted database such as Supabase or Firebase, a host such as Vercel or Netlify, and Stripe for payments. That matters, because those services are where the production rules live.

What is vibe coding good for?

I built Laqtaa, a shared wedding photo app, on my own for a friend’s wedding: one shared camera for your event. About 100 guests used it on the day and nothing broke. Before any code I wrote a 780-line brief with a hard deadline. Even so, on the first day, a couple of hours after 6 milestones were built and deployed in 53 minutes, the next commit read “resolve all critical runtime bugs”. Over 5 weeks it took 188 commits, 93 of them fixes. The full story is in can one person with AI do a whole team’s work.

Where do vibe-coded apps break in production?

In the parts a demo never touches: other people, other people’s data and money.

The payment fix is short once you know it. Verify the signature on the raw body, and skip events you have already handled:

// app/api/stripe-webhook/route.ts (Next.js)
import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);

export async function POST(req: Request) {
  const body = await req.text();   // the raw body, not parsed JSON
  let event: Stripe.Event;
  try {
    event = stripe.webhooks.constructEvent(
      body, req.headers.get('stripe-signature')!, process.env.STRIPE_WEBHOOK_SECRET!);
  } catch {
    return new Response('bad signature', { status: 400 });
  }
  // store event.id; if you have seen it before, return 200 and do nothing
  return new Response('ok');
}

And the double booking is one line of SQL, so the database refuses the second guest whatever the browser thinks:

alter table bookings
  add constraint one_booking_per_slot unique (table_id, slot_start);

What stands between a prototype and production?

Gates. Below is a release pipeline for a made-up restaurant booking app, built over a weekend with an AI app builder. Each gate runs a real kind of check and fails the way vibe-coded apps fail. Pick a fix and re-run the gate: some fixes look right and still fail. The last three gates are where an engineer earns their fee.

Promote a weekend prototype to productionA made-up booking app, built with an AI app builder. Each gate fails the way vibe-coded apps fail. Pick a fix, re-run the gate, promote.

Five gates stand between a vibe-coded prototype and production: secrets, sign-in and data rules, payments, load, and handover. The first two you can usually fix yourself with your AI and a checklist. Payments, load and handover are where an engineer earns their fee. Turn on JavaScript to run the pipeline.

tablebook/Releases/Run 48
Blocked
Commit 7c1e9a2 "add deposits at checkout" by the AI app builder, on main Built over one weekend
  1. PrototypeBuilt
  2. SecretsWaiting
  3. Sign-in and dataWaiting
  4. PaymentsWaiting
  5. LoadWaiting
  6. HandoverWaiting
  7. ProductionWaiting
You + AI fix it yourself with your coding agent and a checklist Engineer bring in someone who reads the code

How do you take a vibe-coded app to production?

This is the order I work in when I take a prototype to production as a forward deployed engineer. I come from coding and design, and I use AI at every step; the steps are what the AI does not do on its own.

  1. Write down what the prototype does. The three or four flows that matter, who uses them and what must never happen. The prototype is now the spec.
  2. Get the code into a repository you own, with separate development and production databases and keys.
  3. Run the security pass. The 13 checks take an afternoon for a small app.
  4. Rebuild the risky paths properly: sign-in, payments and anything that writes data, each with tests.
  5. Load test your busiest moment, then fix what falls over, in the database, not the browser.
  6. Put a guard on the coding agent. I built GVNR, a free and source-available guard that runs on your own machine and works with Claude Code, Cursor, Codex, Gemini CLI and any MCP client. Before each action it decides allow, deny or ask a person, and it keeps a hash-chained record of every decision.
  7. Ship with a way back: a backup you have restored once, the previous release ready to roll back to, and alerts when errors spike.
  8. Name an owner, with a one-page note on how the app runs and deploys.

When should you bring in an engineer?

Before the app does any of these:

You do not need a team for this. You need one person who reads the code, hardens the parts that carry risk and hands it back with tests and notes. That is the work I do as a fractional CPO and forward deployed engineer: prototypes in days, then the hardening that gets them to production.

Questions people ask

Who coined the term vibe coding?

Andrej Karpathy, a founding member of OpenAI and former Director of AI at Tesla, in a post on X on 2 February 2025. Collins Dictionary named it Word of the Year 2025.

Is vibe coding bad?

No. It is the fastest way to a working prototype. It becomes a problem when a prototype goes live with real users, data or payments and nobody has read the code.

Can a vibe-coded app go to production?

Yes, after it passes the gates: secrets, sign-in and data rules, payments, load and handover. Keep what works, rebuild only what fails.

Do I need to know how to code to vibe code?

Not to build a prototype. To ship it safely, someone on the project needs to read code, or you need to bring that person in before launch.

What is the difference between vibe coding and AI-assisted coding?

Who owns the code. In AI-assisted coding a person reads, tests and answers for every change. In vibe coding the AI’s output goes in unread.

If you have a vibe-coded app that needs to reach production, write to me at m@tawfik.tv.

Read next

See all notes