Mihály Tari.

Lokálisan megy, élesben nem. Mi a baj valójában a vibe codinggal épített appjával

Amit az AI írt, az nagyjából rendben van. Az illesztések törnek el: környezet, hálózat, bejelentkezés, adat, deploy, terhelés. Hét tünet, ami mögöttük van, és mennyi munka rendbe tenni.

Épített egy appot Cursorral, Lovable-lel, Bolttal, v0-val vagy Claude-dal. A saját gépén fut. Megmutatta valakinek, tetszett neki. Aztán megpróbálta kitenni az internetre, valami eltört, és az AI, amelyik az egészet írta, nem tudja megmondani, miért.

Ugyanazt a mintát látom újra és újra: a kód, amit az AI írt, nagyjából rendben van. Az illesztések törnek el. Környezet, hálózat, bejelentkezés, adat, deploy, terhelés. A laptopján ezek nem léteznek. Egy gép, egy felhasználó, egy adatbázis, minden titok egy fájlban, amit az app elolvas. Az éles környezet ezeket széthúzza, és minden, amit csendben az tartott össze, hogy „egy gépen van az egész”, egyszerre borul.

Alább a hét leggyakoribb tünet, hogy mi van valójában mögöttük, és mennyi munka szokott lenni rendbe tenni. Az órasávok azok, amiket a mentés oldalán is közlök. Sávok, nem árajánlatok.

1. Lokálisan megy, élesben nem

Amit lát. A localhost:3000 rendben. Az élesített URL-en üres oldal, 500-as hiba, vagy egy pörgő ikon, ami sosem áll meg.

Ami mögötte van. Szinte mindig a környezet. Egy .env fájl, ami sosem jutott el a hostra. Egy adatbázis-URL, ami még mindig a localhost-ra mutat. Egy API, amit az app hív, és az Ön hálózatáról elérhető, a hostéról nem. A kód nem változott. A világ körülötte igen.

Ennek a vállalati méretű változatába egy agentprojekten futottam bele. A felületen egy chatkomponens nem érte el a mögötte lévő szolgáltatást, mert az egy olyan hálózaton ült, amihez a publikus internet nem nyúlhatott. A kódban semmi hiba nem volt. A megoldás egy gateway lett a két hálózat között, úgy beállítva, hogy pontosan azokat a hívásokat engedje át, és semmi mást. Az Ön változata kisebb, egy környezeti változó vagy egy connection string, de ugyanaz az illesztés.

Mennyi munka. Általában belefér az élesítés sávjába, 4–8 óra, mert ennek a kibogozása a „deploy” nagyobbik fele.

2. A build piros, és nem érti, miért

Amit lát. npm run dev-vel fut. A hoston egy fal TypeScript-hibával vagy egy hiányzó modullal elhasal.

Ami mögötte van. A dev mód elnéző, az éles build nem. A típushibák, amiket a dev átengedett, most végzetesek. Egy csomag, ami lokálisan fel van telepítve, de a package.json-ba sosem került be. Egy Node-verzió, amit a host választott, és nem egyezik az Önével. Egy fájlnév, aminek a kis- és nagybetűit a macOS megbocsátotta, a Linux nem.

Mennyi munka. 2–6 óra. A log hosszú, de egyértelmű. Az első valódi hiba általában az egész történet.

3. A bejelentkezés félig működik. Néha.

Amit lát. A regisztráció megy, de egy frissítés kijelentkeztet. Chrome-ban működik, Safariban nem. Önnek megy, az ismerősének, akinek elküldte a linket, nem.

Ami mögötte van. A bejelentkezés az a hely, ahol az AI-eszközök a legmagabiztosabbnak látszó kódot adják a legtöbb lyukkal. Kliensoldalon tárolt session, ami elpárolog. Süti azok a flagek nélkül, amiket az éles HTTPS megkövetel. Csak localhostra regisztrált redirect URL. Egy védett oldal, ami a böngészőben ellenőrzi a bejelentkezést és sehol máshol, így a mögötte lévő API bárkinek válaszol.

Mennyi munka. 6–12 óra. Nem azért, mert bármelyik javítás önmagában nehéz, hanem mert minden útvonalat végig kell nézni, és a működő fele elrejti a nem működőt.

4. Az API-kulcs benne van a kliensoldali kódban

Amit lát. Semmit. Ez a baj. Az app működik. Valahol a JavaScriptben, amit a böngészője letöltött, ott az OpenAI-kulcsa, a Supabase service key-je vagy egy Stripe-titok.

Ami mögötte van. Az AI-nak kellett a kulcs a híváshoz, és odatette, ahol a hívás volt: a frontendbe. Aki megnyitja a fejlesztői eszközöket, annak megvan. Egy LLM-kulcsnál ez egy számla. Egy adatbázis service key-nél ez az egész az Ön adatbázisa.

Mennyi munka. A hívást szerveroldali route mögé vinni, a kulcsot lecserélni, és a git-történetet átnézni, mert a régi kulcs még mindig ott van. Kulcsonként pár óra, több, ha az appnak még egyáltalán nincs szerveroldala.

5. A migrációk eltörtek, az adatbázis nem az, aminek lennie kellene

Amit lát. Egy oszlop, amit a kód vár, nem létezik. Vagy lokálisan létezik, élesben nem. Vagy a migráció lefut, és töröl valamit.

Ami mögötte van. Az AI három helyen szerkesztette a sémát, az ORM-modellben, egy migrációs fájlban és a hosztolt adatbázis felületén, és a három elcsúszott egymástól. A lokális SQLite elnézett olyasmit, amit a Postgres nem. Nincs egyetlen igazságforrás arról, hogy néz ki az adatbázis, így minden környezetnek megvan a sajátja.

Az adatbekötés csővezetéknek látszik, és azon dől el, működik-e bármi. Ugyanazon az agentprojekten a forrásrendszerek bekötése, amikből az agent olvasott, és a célrendszereké, amikbe írt, több munka volt, mint maga az agent. Az Ön léptékében is így van. Nem a modell a kockázat. Az adat útja az.

Mennyi munka. 4–10 óra. Összefésülni a sémát, kijelölni egy igazságforrást, megírni egy migrációt, ami sorvesztés nélkül viszi előre az éles adatbázist, és először egy másolaton lefuttatni.

6. Nem tudja pontosan, mi az a „deploy”

Amit lát. Az AI azt mondja: „deployold Vercelre”. Van Vercel-fiókja. Van egy domainje valahol, egy adatbázisa valahol máshol, és fogalma sincs, mi mihez kapcsolódik.

Ami mögötte van. Még semmi, és pont ez a lényeg. A deploy nem egy gomb. Hosting, domain és DNS, környezeti változók, éles adatbázis, és egy mód, hogy jövő héten mindezt újra megcsinálja anélkül, hogy bármi eltörne. Az első kézi élesítés rendben van. A harmadik kézi élesítésnél vesznek el a dolgok.

Annak az agentprojektnek a backendjét pontosan egyszer élesítettem kézzel. Aztán automatizáltam, mert a harmadik változtatásnál már senki nem tudta megmondani, melyik config az éles. A pipeline nem plusz teher. Ez az egyetlen mód, hogy a „működik” igaz is maradjon.

Mennyi munka. 4–8 óra hostingra, domainre, env-re és adatbázisra, úgy beállítva, hogy a következő élesítés egy git push legyen.

7. Működik, amíg egyszerre ketten nem használják

Amit lát. Amíg Ön teszteli, rendben. Amint egy második ember is rajta van, belassul, vagy A felhasználó B felhasználó adatait látja.

Ami mögötte van. A szerver memóriájában tartott állapot, ami rendben volt, amíg egyszerre egy kérés jött. Egy globális változó, amiben „az aktuális felhasználó” ül. Kérésenként megnyitott és soha le nem zárt adatbázis-kapcsolat. Egy külső API rate limitje, amit most kétszer olyan gyorsan üt.

Mennyi munka. Ez szór a legjobban. Egy megosztott állapot hibája egy délután. Egy olyan felépítés, ami mindenhol egy felhasználót feltételezett, az adatréteg újraépítése, és ezt a diagnózisban mondanám meg, nem pedig órákat kezdenék számlázni.

Ami a hétben közös

Egyik sem arról szól, hogy az AI rossz logikát írt. Arról, hogy az app találkozik egy világgal, amiben sosem futott. A javítás unalmas rendszermunka: környezet, hálózat, azonosítás, adat, élesítés. Ugyanaz a munka, akár hétvégi projekt az app, akár vállalati agent. Csak a méret más.

Ha ezek közül valamelyik most az Ön appja, küldje el a repót vagy az URL-t. Két munkanapon belül írásos diagnózist kap: mi a baj, mit kell hozzá csinálni, és egy órasávot, aminek a felső határát nem lépem túl anélkül, hogy megkérdezném Önt. Ingyen, akkor is, ha nem bíz meg engem. Vibe coding mentés.

Ha nem a saját appja, hanem a csapata AI-jal írt kódbázisa, ami nem elakadt, csak senki nem olvasta el, arra más való: AI-kód audit.

Ha van egy feladat, amit meg kell építeni vagy rendbe tenni, írja le röviden, és két munkanapon belül válaszolok.

Kapcsolat

← Összes írás