All posts

Vibe Coding 馃4 min read

Seven Vibe Coding Mistakes That Only Show Up After You Ship

Vibe coding works, and the mistakes are not in the code you can see. They are in the questions nobody asked, and they surface weeks later when there is money moving through the thing.

By Juan Molina

Blog title card reading Vibe Coding Mistakes, What Shows Up After You Ship, beside an illustration of a code window with warning triangles on three lines and a shopping cart icon above it

Vibe coding works. That is the part the arguments about it keep missing. You describe what you want, a model writes it, and something real exists by the evening. For a landing page, an internal tool, a prototype you are going to throw away, it is the fastest thing that has ever happened to software.

The mistakes are not in the code you can see. They are in the questions nobody asked, and they surface weeks later, when there is money moving through the thing.

1. Accepting code you cannot read

This is the root mistake and every other one grows out of it. If you cannot read what came back, you cannot tell working from looks-like-working, and those are indistinguishable in a demo.

The fix is not learning to code. It is narrowing what you accept. Ask for one thing at a time, in small pieces, and make the model explain what each piece does before you keep it. An explanation you do not understand is a piece you should not ship.

2. Trusting the browser

The single most expensive category, and it looks completely normal in generated code.

A price calculated in the front end and sent to the server. A discount validated in JavaScript. A quantity check that runs in the component. Every one of those works perfectly until somebody opens developer tools and changes the number, because anything running in the browser belongs to the customer, not to you.

The rule is simple and models will not apply it unless told: the browser asks, the server decides. Prices, discounts, stock and totals get recalculated on the server from your own data, every time, no exceptions.

3. Letting the generated schema become the product

Ask for a store and you will get a products table with a price column. That is correct for about a month.

Then you need a second size, and price belongs to the variant rather than the product. Then a sale price with dates. Then tax treated differently by state. Then an order that has to remember what the price was at the time it was placed, because that is what the customer paid and refunds depend on it.

Each of those is a schema change to a table that now has real rows in it. The model gave you a reasonable starting point and had no idea what you were going to sell.

4. Never asking what happens when it fails

Generated code describes the path where everything works. Ask what happens when the payment provider times out after charging the card, when the same webhook arrives twice, when a customer double-clicks the pay button, and the answers usually do not exist.

These are not rare. Networks drop, providers retry, people click twice. In an ordinary app the result is a confusing screen. Where money is involved, the result is a double charge and a refund you have to work out by hand.

5. Treating tests as something for later

Understandable, and it inverts what vibe coding is actually good at. Models are excellent at writing tests, because a test is a small, self-contained, precisely specified thing.

More usefully, tests are how you keep changing code you cannot read. Without them, every new prompt risks silently breaking something that worked yesterday, and you will not find out until a customer does.

6. Shipping every key you were given

Ask for a payment integration and the model will use the key you pasted. It does not know which of your keys is safe in a browser and which one reads every order you have ever taken, and it will not ask.

Anything in your front end bundle is public. Not hidden, not obfuscated, public, in a file anyone can open. This has its own article because it is the mistake with the worst consequences.

7. Building the boring half yourself

The last one is strategic rather than technical.

Catalog, cart, checkout, orders, customers, inventory, shipping, refunds. None of it is interesting and all of it is solved. It is also the exact part where the six mistakes above do damage, because it is the part that touches money.

Vibe coding is genuinely strong at the storefront: layout, interaction, copy, the thing your customers look at. It is weakest at the transactional core, which is where being subtly wrong is most expensive. Building that half yourself, with a tool that is best at the other half, is the mistake underneath the other six.

What to do instead

Keep vibe coding the part you can evaluate by looking at it. Ask for small pieces and reject what you cannot follow. Move every decision about money to the server. And for the part where errors cost money rather than time, use something that already solved it.

That is what we mean by vibe the front end and rent the back end, and it is less a sales pitch than a description of where the failures actually happen.

If you want to see what the transactional half looks like when you are not writing it, the docs are the endpoints.

Tagged

  • vibe coding
  • ai
  • ecommerce
  • development

Related Blogs

More from the blog, picked at random. Everything published is on the index.

1 of 15

Build on It Yourself

Sign up, take your keys, and scaffold a storefront against a real backend.

Seven Vibe Coding Mistakes That Only Show Up After You Ship 路 DashForDevs