Prawdziwe przyczyny i konkretne rozwiązania. AI optymalizuje pod działające demo, nie pod system produkcyjny. Przy 15–30 cichych decyzjach architektonicznych na feature z dokładnością ~70% każdej, szansa że wszystkie są poprawne jest praktycznie zerowa.
Real reasons and concrete fixes. AI optimizes for a working demo, not a production system. With 15–30 silent architectural decisions per feature at ~70% accuracy each, the probability of ALL being correct is practically zero.
Verkliga orsaker och konkreta lösningar. AI optimerar för en fungerande demo, inte ett produktionssystem. Med 15–30 tysta arkitekturbeslut per feature med ~70% träffsäkerhet vardera, är sannolikheten att ALLA är korrekta praktiskt taget noll.
Ekte årsaker og konkrete løsninger. AI optimaliserer for en fungerende demo, ikke et produksjonssystem. Med 15–30 stille arkitekturbeslutninger per feature med ~70% nøyaktighet hver, er sannsynligheten for at ALLE er korrekte praktisk talt null.
«Działa na mojej maszynie» to najstarszy żart w inżynierii oprogramowania. Ale przy aplikacjach generowanych przez AI to nie jest żart — to stan domyślny. AI nie myśli o produkcji. Nie wie, czym jest load balancer, connection pool czy secrets manager. Widzi tylko jedno: Twój lokalny kontekst, Twój plik, Twoją próbę uruchomienia.
Kiedy AI buduje feature, podejmuje 15–30 cichych decyzji architektonicznych: jaka baza danych, jak łączyć się z API, gdzie trzymać klucze, jak obsługiwać błędy. Każda z tych decyzji ma mniej więcej 70% szans na bycie poprawną. Ale żeby cały feature działał na produkcji, wszystkie decyzje muszą być poprawne. Prawdopodobieństwo? Przy 20 decyzjach: 0.7^20 = 0.08%. Praktycznie zero.
Ten artykuł opisuje sześć najczęstszych powodów, dla których aplikacje AI działają lokalnie i padają na produkcji — z konkretnymi przykładami i rozwiązaniami. Jeśli budujesz z Cursor, Bolt, Lovable, Replit lub innym narzędziem AI, ten poradnik jest dla Ciebie.
“It works on my machine” is the oldest joke in software engineering. With AI-generated apps, it’s not a joke — it’s the default state. AI doesn’t think about production. It doesn’t know what a load balancer, connection pool, or secrets manager is. It sees only one thing: your local context, your file, your attempt to run it.
When AI builds a feature, it makes 15–30 silent architectural decisions: which database, how to connect to an API, where to store keys, how to handle errors. Each decision has roughly a 70% chance of being correct. But for the entire feature to work in production, all decisions must be correct. The probability? With 20 decisions: 0.7^20 = 0.08%. Practically zero.
This article covers the six most common reasons AI apps work locally and crash in production — with concrete examples and fixes. If you’re building with Cursor, Bolt, Lovable, Replit, or any other AI tool, this guide is for you.
“Det fungerar på min maskin” är det äldsta skämtet inom mjukvaruutveckling. Med AI-genererade appar är det inget skämt — det är standardtillståndet. AI tänker inte på produktion. Den vet inte vad en lastbalanserare, anslutningspool eller hemlighetshanterare är. Den ser bara en sak: din lokala kontext, din fil, ditt försök att köra den.
När AI bygger en feature fattar den 15–30 tysta arkitekturbeslut: vilken databas, hur man ansluter till ett API, var man lagrar nycklar, hur man hanterar fel. Varje beslut har ungefär 70% chans att vara korrekt. Men för att hela featuren ska fungera i produktion måste alla beslut vara korrekta. Sannolikheten? Med 20 beslut: 0.7^20 = 0.08%. Praktiskt taget noll.
Den här artikeln tar upp de sex vanligaste orsakerna till att AI-appar fungerar lokalt men kraschar i produktion — med konkreta exempel och lösningar. Om du bygger med Cursor, Bolt, Lovable, Replit eller något annat AI-verktyg, är den här guiden för dig.
«Det fungerer på maskinen min» er den eldste vitsen innen programvareutvikling. Med AI-genererte apper er det ingen vits — det er standardtilstanden. AI tenker ikke på produksjon. Den vet ikke hva en lastbalanserer, tilkoblingspool eller hemmelighetsbehandler er. Den ser bare én ting: din lokale kontekst, din fil, ditt forsøk på å kjøre den.
Når AI bygger en feature, tar den 15–30 stille arkitekturbeslutninger: hvilken database, hvordan koble til et API, hvor lagre nøkler, hvordan håndtere feil. Hver beslutning har omtrent 70% sjanse for å være korrekt. Men for at hele featuren skal fungere i produksjon, må alle beslutninger være korrekte. Sannsynligheten? Med 20 beslutninger: 0.7^20 = 0.08%. Praktisk talt null.
Denne artikkelen dekker de seks vanligste grunnene til at AI-apper fungerer lokalt og krasjer i produksjon — med konkrete eksempler og løsninger. Hvis du bygger med Cursor, Bolt, Lovable, Replit eller et annet AI-verktøy, er denne guiden for deg.
To najbardziej banalny i jednocześnie najczęstszy powód awarii na produkcji: konfiguracja, która działa tylko lokalnie. Twój plik .env na laptopie ma prawdziwe klucze API, poprawne URL-e, działające sekrety. Na produkcji? Placeholdery, brakujące zmienne, albo zupełnie inne adresy.
AI nigdy nie myśli o zarządzaniu konfiguracjami — widzi tylko lokalny kontekst. Kiedy generuje kod, który łączy się z API, wpisuje http://localhost:3000 bezpośrednio w kodzie. Kiedy potrzebuje klucza API, tworzy zmienną z domyślną wartością. Kiedy buduje URL do bazy danych, hardcoduje string połączenia.
Typowe problemy:
http://localhost:3000/api zamiast zmiennej środowiskowej. Działa lokalnie, w produkcji wskazuje na nikąd..env. Musisz ustawić zmienne w panelu hostingu (Vercel, Railway, Render).http://, produkcja wymaga https://. Mieszanie protokołów powoduje blokowanie przez przeglądarkę (mixed content) i błędy CORS.Twój lokalny .env ma prawdziwe klucze. Produkcja może mieć placeholdery, błędne URL-e albo brakujące sekrety. AI nigdy nie myśli o zarządzaniu konfiguracjami — widzi tylko lokalny kontekst.
Externalizuj CAŁĄ konfigurację. Każdy URL, każdy klucz, każdy sekret powinien pochodzić ze zmiennej środowiskowej — nigdy z kodu źródłowego. Użyj secrets managera (np. Doppler, AWS Secrets Manager, Vercel Environment Variables). Stwórz plik .env.example z nazwą każdej wymaganej zmiennej (bez wartości) i dodaj go do repozytorium jako dokumentację.
This is the most obvious and simultaneously most common reason for production failures: configuration that only works locally. Your .env file on your laptop has real API keys, correct URLs, working secrets. In production? Placeholders, missing variables, or entirely different addresses.
AI never thinks about configuration management — it only sees local context. When it generates code that connects to an API, it writes http://localhost:3000 directly in the code. When it needs an API key, it creates a variable with a default value. When it builds a database URL, it hardcodes the connection string.
Typical problems:
http://localhost:3000/api instead of an environment variable. Works locally, points to nowhere in production..env file. You need to set variables in your hosting panel (Vercel, Railway, Render).http://, production requires https://. Mixing protocols causes browser blocking (mixed content) and CORS errors.Your local .env has real keys. Production might have placeholders, wrong URLs, or missing secrets. AI never thinks about config management — it only sees local context.
Externalize ALL configuration. Every URL, every key, every secret should come from an environment variable — never from source code. Use a secrets manager (e.g., Doppler, AWS Secrets Manager, Vercel Environment Variables). Create an .env.example file with the name of every required variable (without values) and add it to the repository as documentation.
Detta är den mest uppenbara och samtidigt vanligaste orsaken till produktionsfel: konfiguration som bara fungerar lokalt. Din .env-fil på din laptop har riktiga API-nycklar, korrekta URL:er, fungerande hemligheter. I produktion? Platshållare, saknade variabler eller helt andra adresser.
AI tänker aldrig på konfigurationshantering — den ser bara lokal kontext. När den genererar kod som ansluter till ett API skriver den http://localhost:3000 direkt i koden. När den behöver en API-nyckel skapar den en variabel med ett standardvärde. När den bygger en databas-URL hardkodar den anslutningssträngen.
Typiska problem:
http://localhost:3000/api istället för en miljövariabel. Fungerar lokalt, pekar ingenstans i produktion..env-fil. Du måste sätta variabler i din hostingpanel (Vercel, Railway, Render).http://, produktion kräver https://. Att blanda protokoll orsakar webbläsarblockering (mixed content) och CORS-fel.Din lokala .env har riktiga nycklar. Produktion kan ha platshållare, felaktiga URL:er eller saknade hemligheter. AI tänker aldrig på konfigurationshantering — den ser bara lokal kontext.
Externalisera ALL konfiguration. Varje URL, varje nyckel, varje hemlighet bör komma från en miljövariabel — aldrig från källkod. Använd en hemlighetshanterare (t.ex. Doppler, AWS Secrets Manager, Vercel Environment Variables). Skapa en .env.example-fil med namnet på varje krävd variabel (utan värden) och lägg till den i repot som dokumentation.
Dette er den mest åpenbare og samtidig vanligste årsaken til produksjonsfeil: konfigurasjon som bare fungerer lokalt. .env-filen din på laptopen har ekte API-nøkler, korrekte URL-er, fungerende hemmeligheter. I produksjon? Plassholdere, manglende variabler eller helt andre adresser.
AI tenker aldri på konfigurasjonshåndtering — den ser bare lokal kontekst. Når den genererer kode som kobler til et API, skriver den http://localhost:3000 direkte i koden. Når den trenger en API-nøkkel, oppretter den en variabel med en standardverdi. Når den bygger en database-URL, hardkoder den tilkoblingsstrengen.
Typiske problemer:
http://localhost:3000/api i stedet for en miljøvariabel. Fungerer lokalt, peker ingensteds i produksjon..env-fil. Du må sette variabler i hostingpanelet ditt (Vercel, Railway, Render).http://, produksjon krever https://. Å blande protokoller forårsaker nettleserblokkering (mixed content) og CORS-feil.Din lokale .env har ekte nøkler. Produksjon kan ha plassholdere, feil URL-er eller manglende hemmeligheter. AI tenker aldri på konfigurasjonshåndtering — den ser bare lokal kontekst.
Eksternaliser ALL konfigurasjon. Hver URL, hver nøkkel, hver hemmelighet bør komme fra en miljøvariabel — aldri fra kildekode. Bruk en hemmelighetsbehandler (f.eks. Doppler, AWS Secrets Manager, Vercel Environment Variables). Opprett en .env.example-fil med navnet på hver påkrevd variabel (uten verdier) og legg den til i repoet som dokumentasjon.
AI kocha SQLite. Jest prosta, nie wymaga serwera, to tylko plik. Idealnie nadaje się do prototypu. Problem? Platformy serverless (Vercel, Netlify Functions, AWS Lambda) nie obsługują SQLite, bo każde zapytanie może trafić na inną instancję — nie ma współdzielonego systemu plików.
Ale baza danych to nie tylko silnik. To cały zestaw założeń, które AI robi cicho:
AI używa SQLite, bo nie wymaga serwera. Ale platformy serverless łamią SQLite — każde zapytanie może trafić na inną instancję bez współdzielonego systemu plików. Zapytania, które działają na 50 rekordach, trwają 30 sekund na 50 000 bez indeksów.
Użyj PostgreSQL lub MySQL na produkcji. Skonfiguruj connection pooling (PgBouncer, Supabase ma to wbudowane). Dodaj indeksy na kolumnach używanych w WHERE i JOIN. Zaplanuj strategię migracji — użyj narzędzia jak Prisma Migrate, Drizzle, albo zwykłych plików SQL z wersjonowaniem. Nigdy nie modyfikuj schematu produkcyjnego ręcznie.
AI loves SQLite. It’s simple, requires no server, it’s just a file. Perfect for a prototype. The problem? Serverless platforms (Vercel, Netlify Functions, AWS Lambda) don’t support SQLite because each request can hit a different instance — there’s no shared filesystem.
But the database isn’t just the engine. It’s a whole set of assumptions AI makes silently:
AI uses SQLite because it requires no server. But serverless platforms break SQLite — each request can hit a different instance with no shared filesystem. Queries that work on 50 rows take 30 seconds on 50,000 without indexes.
Use PostgreSQL or MySQL in production. Configure connection pooling (PgBouncer, Supabase has it built-in). Add indexes on columns used in WHERE and JOIN. Plan a migration strategy — use a tool like Prisma Migrate, Drizzle, or plain SQL files with versioning. Never modify your production schema manually.
AI älskar SQLite. Den är enkel, kräver ingen server, det är bara en fil. Perfekt för en prototyp. Problemet? Serverlösa plattformar (Vercel, Netlify Functions, AWS Lambda) stödjer inte SQLite eftersom varje förfrågan kan träffa en annan instans — det finns inget delat filsystem.
Men databasen är inte bara motorn. Det är en hel uppsättning antaganden som AI gör tyst:
AI använder SQLite för att den inte kräver någon server. Men serverlösa plattformar bryter SQLite — varje förfrågan kan träffa en annan instans utan delat filsystem. Förfrågningar som fungerar på 50 rader tar 30 sekunder på 50 000 utan index.
Använd PostgreSQL eller MySQL i produktion. Konfigurera anslutningspoolning (PgBouncer, Supabase har det inbyggt). Lägg till index på kolumner som används i WHERE och JOIN. Planera en migrationsstrategi — använd ett verktyg som Prisma Migrate, Drizzle eller vanliga SQL-filer med versionering. Modifiera aldrig ditt produktionsschema manuellt.
AI elsker SQLite. Den er enkel, krever ingen server, det er bare en fil. Perfekt for en prototype. Problemet? Serverløse plattformer (Vercel, Netlify Functions, AWS Lambda) støtter ikke SQLite fordi hver forespørsel kan treffe en annen instans — det finnes ikke noe delt filsystem.
Men databasen er ikke bare motoren. Det er et helt sett med antakelser AI gjør stille:
AI bruker SQLite fordi den ikke krever noen server. Men serverløse plattformer bryter SQLite — hver forespørsel kan treffe en annen instans uten delt filsystem. Spørringer som fungerer på 50 rader tar 30 sekunder på 50 000 uten indekser.
Bruk PostgreSQL eller MySQL i produksjon. Konfigurer tilkoblingspooling (PgBouncer, Supabase har det innebygd). Legg til indekser på kolonner brukt i WHERE og JOIN. Planlegg en migrasjonsstrategi — bruk et verktøy som Prisma Migrate, Drizzle eller vanlige SQL-filer med versjonering. Modifiser aldri produksjonsskjemaet manuelt.
Badanie Georgetown CSET wykazało, że 45% kodu generowanego przez AI zawiera luki bezpieczeństwa. To nie jest marginalny problem — to niemal połowa całego kodu. A kod, który «działa» na localhost, nie musi być bezpieczny.
Skan 5 600 aplikacji zbudowanych metodą vibecoding ujawnił ponad 2 000 luk o wysokim wpływie i ponad 400 ujawnionych sekretów. Platforma Moltbook ujawniła 1,5 miliona kluczy API — Row Level Security na Supabase nigdy nie zostało włączone. Lovable miał odwróconą kontrolę dostępu w 170 aplikacjach produkcyjnych (CVE-2025-48757): uwierzytelnieni użytkownicy byli blokowani, a nieuwierzytelnieni dostawali pełny dostęp.
Problemy, które widzę regularnie:
45% kodu AI zawiera luki bezpieczeństwa. Skan 5 600 vibe-coded aplikacji: 2 000+ luk o wysokim wpływie, 400+ ujawnionych sekretów. Lovable miał odwróconą kontrolę dostępu w 170 produkcyjnych aplikacjach.
Przeprowadź audyt OWASP Top 10. Włącz Row Level Security na Supabase. Waliduj wszystkie inputy po stronie serwera (nigdy nie ufaj klientowi). Przeskanuj repozytorium pod kątem ujawnionych sekretów (użyj gitleaks lub trufflehog). Dodaj rate limiting na wszystkich publicznych endpointach. Przenieś klucze API z frontendu do backendu.
A Georgetown CSET study found that 45% of AI-generated code contains security vulnerabilities. This isn’t a marginal problem — it’s nearly half of all code. And code that “works” on localhost doesn’t have to be secure.
A scan of 5,600 vibe-coded apps revealed over 2,000 high-impact vulnerabilities and over 400 exposed secrets. The platform Moltbook exposed 1.5 million API keys — Row Level Security on Supabase was never enabled. Lovable had inverted access control across 170 production apps (CVE-2025-48757): authenticated users were blocked while unauthenticated users got full access.
Problems I see regularly:
45% of AI code contains security vulnerabilities. Scan of 5,600 vibe-coded apps: 2,000+ high-impact vulnerabilities, 400+ exposed secrets. Lovable had inverted access control across 170 production apps.
Run an OWASP Top 10 audit. Enable Row Level Security on Supabase. Validate all inputs server-side (never trust the client). Scan your repository for exposed secrets (use gitleaks or trufflehog). Add rate limiting on all public endpoints. Move API keys from frontend to backend.
En Georgetown CSET-studie fann att 45% av AI-genererad kod innehåller säkerhetsbrister. Det här är inte ett marginellt problem — det är nästan hälften av all kod. Och kod som “fungerar” på localhost behöver inte vara säker.
En skanning av 5 600 vibe-kodade appar avslöjade över 2 000 högriskbrister och över 400 exponerade hemligheter. Plattformen Moltbook exponerade 1,5 miljoner API-nycklar — Row Level Security på Supabase aktiverades aldrig. Lovable hade inverterad åtkomstkontroll över 170 produktionsappar (CVE-2025-48757): autentiserade användare blockerades medan oautentiserade fick full åtkomst.
Problem jag ser regelbundet:
45% av AI-kod innehåller säkerhetsbrister. Skanning av 5 600 vibe-kodade appar: 2 000+ högriskbrister, 400+ exponerade hemligheter. Lovable hade inverterad åtkomstkontroll över 170 produktionsappar.
Kör en OWASP Top 10-granskning. Aktivera Row Level Security på Supabase. Validera alla inputs på serversidan (lita aldrig på klienten). Skanna ditt repo efter exponerade hemligheter (använd gitleaks eller trufflehog). Lägg till rate limiting på alla publika endpoints. Flytta API-nycklar från frontend till backend.
En Georgetown CSET-studie fant at 45% av AI-generert kode inneholder sikkerhetssårbarheter. Dette er ikke et marginalt problem — det er nesten halvparten av all kode. Og kode som «fungerer» på localhost trenger ikke være sikker.
En skanning av 5 600 vibe-kodede apper avslørte over 2 000 høyrisikobrister og over 400 eksponerte hemmeligheter. Plattformen Moltbook eksponerte 1,5 millioner API-nøkler — Row Level Security på Supabase ble aldri aktivert. Lovable hadde invertert tilgangskontroll over 170 produksjonsapper (CVE-2025-48757): autentiserte brukere ble blokkert mens uautentiserte fikk full tilgang.
Problemer jeg ser regelmessig:
45% av AI-kode inneholder sikkerhetssårbarheter. Skanning av 5 600 vibe-kodede apper: 2 000+ høyrisikobrister, 400+ eksponerte hemmeligheter. Lovable hadde invertert tilgangskontroll over 170 produksjonsapper.
Kjør en OWASP Top 10-gjennomgang. Aktiver Row Level Security på Supabase. Valider alle inputs på serversiden (stol aldri på klienten). Skann repoet ditt etter eksponerte hemmeligheter (bruk gitleaks eller trufflehog). Legg til rate limiting på alle offentlige endepunkter. Flytt API-nøkler fra frontend til backend.
Twoja aplikacja działa przez pierwsze 100 zapytań. Zapytanie numer 1 001 powoduje awarię — wszystkie połączenia z bazą są wyczerpane. Dlaczego? Bo AI nigdy nie zamknęło połączeń. Każde zapytanie otwierało nowe połączenie, ale żadne go nie zwalniało.
To samo dotyczy uchwytów plików, listenerów WebSocket, timerów i subskrypcji. AI tworzy zasoby, ale ich nie zwalnia. Na localhost nie widać tego, bo restartowanie serwera co kilka minut resetuje wszystko. Na produkcji serwer działa bez przerwy — i zasoby się kończą.
Jeszcze gorsze są ciche błędy:
try/catch — płatność nie przechodzi, webhook nie wystrzeliwuje, ale użytkownik nie widzi żadnego błędu. Dane znikają po cichu.Połączenia z bazą, które nigdy nie są zamykane. Uchwyty plików, które pozostają otwarte. Listenery WebSocket, które nie są sprzątane. Działa przez pierwsze 100 zapytań — zapytanie 1 001 powoduje awarię.
Dodaj error boundaries na frontendzie (React: ErrorBoundary). Dodaj globalny error handler na backendzie (process.on('uncaughtException')). Wdrażaj strukturalne logowanie (Sentry, LogRocket, Pino). Zamykaj połączenia z bazą po użyciu (albo użyj connection poolingu). Sprzątaj listenery i timery w useEffect cleanup. Testuj pod obciążeniem — nie wystarczy sprawdzić, że działa raz.
Your application works for the first 100 requests. Request 1,001 causes a crash — all database connections are exhausted. Why? Because AI never closed them. Every request opened a new connection, but none released it.
The same applies to file handles, WebSocket listeners, timers, and subscriptions. AI creates resources but doesn’t release them. On localhost you don’t notice because restarting the server every few minutes resets everything. In production the server runs continuously — and resources run out.
Even worse are silent failures:
try/catch blocks — payment fails, webhook doesn’t fire, but the user sees no error. Data disappears silently.Database connections that are never closed. File handles left open. WebSocket listeners never cleaned up. Works for the first 100 requests — request 1,001 crashes because all connections are exhausted.
Add error boundaries on the frontend (React: ErrorBoundary). Add a global error handler on the backend (process.on('uncaughtException')). Deploy structured logging (Sentry, LogRocket, Pino). Close database connections after use (or use connection pooling). Clean up listeners and timers in useEffect cleanup. Load test — checking that it works once isn’t enough.
Din applikation fungerar för de första 100 förfrågningarna. Förfrågan nummer 1 001 orsakar en krasch — alla databasanslutningar är uttömda. Varför? För att AI aldrig stängde dem. Varje förfrågan öppnade en ny anslutning, men ingen frigav den.
Samma sak gäller filhandtag, WebSocket-lyssnare, timers och prenumerationer. AI skapar resurser men frigör dem inte. På localhost märker du inte det för att servern startas om var några minut och återställer allt. I produktion kör servern kontinuerligt — och resurser tar slut.
Ännu värre är tysta fel:
try/catch-block — betalning misslyckas, webhook avfyras inte, men användaren ser inget fel. Data försvinner tyst.Databasanslutningar som aldrig stängs. Filhandtag som lämnas öppna. WebSocket-lyssnare som aldrig rensas. Fungerar för de första 100 förfrågningarna — förfrågan 1 001 kraschar för alla anslutningar är uttömda.
Lägg till error boundaries på frontend (React: ErrorBoundary). Lägg till en global felhanterare på backend (process.on('uncaughtException')). Driftsätt strukturerad loggning (Sentry, LogRocket, Pino). Stäng databasanslutningar efter användning (eller använd anslutningspoolning). Rensa lyssnare och timers i useEffect cleanup. Belastningstesta — att kontrollera att det fungerar en gång räcker inte.
Applikasjonen din fungerer for de første 100 forespørslene. Forespørsel nummer 1 001 forårsaker en krasj — alle databasetilkoblinger er uttømt. Hvorfor? Fordi AI aldri lukket dem. Hver forespørsel åpnet en ny tilkobling, men ingen frigav den.
Det samme gjelder filhåndtak, WebSocket-lyttere, timere og abonnementer. AI oppretter ressurser men frigir dem ikke. På localhost legger du ikke merke til det fordi serveren startes på nytt hvert par minutt og tilbakestiller alt. I produksjon kjører serveren kontinuerlig — og ressursene tar slutt.
Enda verre er stille feil:
try/catch-blokker — betaling feiler, webhook avfyres ikke, men brukeren ser ingen feil. Data forsvinner stille.Databasetilkoblinger som aldri lukkes. Filhåndtak som blir stående åpne. WebSocket-lyttere som aldri ryddes opp. Fungerer for de første 100 forespørslene — forespørsel 1 001 krasjer fordi alle tilkoblinger er uttømt.
Legg til error boundaries på frontend (React: ErrorBoundary). Legg til en global feilbehandler på backend (process.on('uncaughtException')). Distribuer strukturert logging (Sentry, LogRocket, Pino). Lukk databasetilkoblinger etter bruk (eller bruk tilkoblingspooling). Rydd opp lyttere og timere i useEffect cleanup. Belastningstest — å sjekke at det fungerer én gang er ikke nok.
To nie są teoretyczne zagrożenia. To incydenty, które już się wydarzyły:
t3.micro kosztuje inaczej niż r5.4xlarge. Skalowanie kosztów to coś, o czym AI w ogóle nie myśli.plan zamiast price), podwójne naliczenia przez 2 tygodnie zanim ktoś zauważył.AI obiecało 10x developers. W praktyce: juniorzy zostali prompt engineerami, seniorzy zostali sprzątaczami kodu. Koszt naprawy kodu AI często przewyższa koszt napisania go od zera.
Wzorzec powtarza się: AI generuje kod, który wygląda dobrze. Przechodzi code review (bo jest czytelny). Przechodzi testy (bo testuje szczęśliwą ścieżkę). A potem wybucha na produkcji, bo nikt nie sprawdził wydajności pod obciążeniem, obsługi błędów, bezpieczeństwa ani kosztów infrastruktury.
These aren’t theoretical threats. These are incidents that have already happened:
t3.micro costs differently than r5.4xlarge. Cost scaling is something AI never thinks about.plan instead of price), duplicate charges for 2 weeks before anyone noticed.AI promised 10x developers. Instead: juniors became prompt engineers, seniors became code janitors. The cost of fixing AI code often exceeds the cost of writing it from scratch.
The pattern repeats: AI generates code that looks good. It passes code review (because it’s readable). It passes tests (because it tests the happy path). Then it explodes in production because nobody checked performance under load, error handling, security, or infrastructure costs.
Det här är inte teoretiska hot. Det här är incidenter som redan har hänt:
t3.micro kostar annorlunda än r5.4xlarge. Kostnadsskalning är något AI aldrig tänker på.plan istället för price), dubbeldebiteringar i 2 veckor innan någon märkte.AI lovade 10x-utvecklare. Istället: juniorer blev promptingenjörer, seniorer blev kodstädare. Kostnaden för att fixa AI-kod överstiger ofta kostnaden för att skriva den från början.
Mönstret upprepas: AI genererar kod som ser bra ut. Den klarar kodgranskning (för den är läsbar). Den klarar tester (för den testar den lyckliga vägen). Sedan exploderar den i produktion för att ingen kontrollerade prestanda under belastning, felhantering, säkerhet eller infrastrukturkostnader.
Dette er ikke teoretiske trusler. Dette er hendelser som allerede har skjedd:
t3.micro koster annerledes enn r5.4xlarge. Kostnadsskalering er noe AI aldri tenker på.plan i stedet for price), doble belastninger i 2 uker før noen la merke til det.AI lovet 10x-utviklere. I stedet: juniorer ble promptingenjører, seniorer ble kodevaskere. Kostnaden for å fikse AI-kode overstiger ofte kostnaden for å skrive den fra bunnen av.
Mønsteret gjentar seg: AI genererer kode som ser bra ut. Den består kodegjennomgang (fordi den er lesbar). Den består tester (fordi den tester den lykkelige stien). Så eksploderer den i produksjon fordi ingen sjekket ytelse under belastning, feilhåndtering, sikkerhet eller infrastrukturkostnader.
Zanim wdrożysz swoją aplikację, przejdź przez te punkty. Każdy niespełniony punkt to potencjalna awaria na produkcji. Ta checklista powstała na podstawie dziesiątek audytów aplikacji AI, które przeprowadziłem dla klientów.
Before you deploy your application, go through these points. Every unmet point is a potential production failure. This checklist was built from dozens of AI app audits I’ve conducted for clients.
Innan du driftsätter din applikation, gå igenom dessa punkter. Varje ouppfylld punkt är ett potentiellt produktionsfel. Denna checklista byggdes från dussintal AI-appgranskningar jag genomfört för kunder.
Før du ruller ut applikasjonen din, gå gjennom disse punktene. Hvert uoppfylt punkt er en potensiell produksjonsfeil. Denne sjekklisten ble bygd fra dusinvis av AI-apprevisjoner jeg har utført for kunder.
Dlatego, że localhost to idealne środowisko: same-origin (brak CORS), zerowa latencja sieciowa, tryb developerski maskuje ostrzeżenia, Ty jesteś jedynym użytkownikiem (brak race conditions, brak obciążenia). Na produkcji każdy z tych warunków jest inny — i każdy może spowodować awarię.
Because localhost is a perfect environment: same-origin (no CORS), zero network latency, dev mode masks warnings, you’re the only user (no race conditions, no load). In production every one of these conditions is different — and any of them can cause a failure.
För att localhost är en perfekt miljö: same-origin (ingen CORS), noll nätverkslatens, dev-läge maskerar varningar, du är den enda användaren (inga race conditions, ingen belastning). I produktion är varje ett av dessa villkor annorlunda — och något av dem kan orsaka ett fel.
Fordi localhost er et perfekt miljø: same-origin (ingen CORS), null nettverkslatens, dev-modus maskerer advarsler, du er den eneste brukeren (ingen race conditions, ingen belastning). I produksjon er hvert av disse vilkårene annerledes — og hvert av dem kan forårsake en feil.
Brakujące zmienne środowiskowe i hardcoded konfiguracja. To banalne, ale odpowiada za większość awarii «działa lokalnie, nie działa na produkcji». Twój .env ma klucze — serwer produkcyjny nie. AI hardcoduje URL-e w kodzie źródłowym zamiast używać zmiennych środowiskowych.
Missing environment variables and hardcoded configuration. It’s trivial, but it accounts for the majority of “works locally, fails in production” issues. Your .env has keys — the production server doesn’t. AI hardcodes URLs in source code instead of using environment variables.
Saknade miljövariabler och hardkodad konfiguration. Det är trivialt, men det står för majoriteten av “fungerar lokalt, misslyckas i produktion”-problemen. Din .env har nycklar — produktionsservern har det inte. AI hardkodar URL:er i källkoden istället för att använda miljövariabler.
Manglende miljøvariabler og hardkodet konfigurasjon. Det er trivielt, men det står for hoveddelen av «fungerer lokalt, feiler i produksjon»-problemene. .env-filen din har nøkler — produksjonsserveren har det ikke. AI hardkoder URL-er i kildekoden i stedet for å bruke miljøvariabler.
Proste pytanie: jeśli nie potrafisz odpowiedzieć «co się stanie, kiedy X padnie?» dla każdej krytycznej ścieżki, Twoja aplikacja nie jest gotowa. Co się stanie, kiedy baza danych będzie niedostępna? Co się stanie, kiedy API Stripe zwróci błąd? Co się stanie, kiedy 100 użytkowników kliknie «Kup» w tej samej sekundzie? Jeśli nie masz odpowiedzi — masz pracę do zrobienia.
Simple question: if you can’t answer “what happens when X fails?” for every critical path, your app is not ready. What happens when the database is unavailable? When the Stripe API returns an error? When 100 users click “Buy” at the same second? If you don’t have answers — you have work to do.
Enkel fråga: om du inte kan svara på “vad händer när X går ner?” för varje kritisk väg, är din app inte klar. Vad händer när databasen är otillgänglig? När Stripe-API:et returnerar ett fel? När 100 användare klickar “Köp” samma sekund? Om du inte har svar — har du arbete att göra.
Enkelt spørsmål: hvis du ikke kan svare på «hva skjer når X feiler?» for hver kritisk sti, er appen din ikke klar. Hva skjer når databasen er utilgjengelig? Når Stripe-API-et returnerer en feil? Når 100 brukere klikker «Kjøp» i samme sekund? Hvis du ikke har svar — har du arbeid å gjøre.
Zazwyczaj nie. Najpierw zrób audyt. Zidentyfikuj krytyczne luki (bezpieczeństwo, baza danych, konfiguracja). Napraw je punkt po punkcie. Przepisanie od zera ma sens tylko wtedy, kiedy architektura jest fundamentalnie błędna — ale w większości przypadków można naprawić istniejący kod iteracyjnie, bez utraty dotychczasowej pracy.
Usually no. Start with an audit. Identify critical gaps (security, database, configuration). Fix them point by point. A full rewrite only makes sense when the architecture is fundamentally flawed — but in most cases you can fix existing code iteratively without losing the work done so far.
Vanligtvis inte. Börja med en granskning. Identifiera kritiska brister (säkerhet, databas, konfiguration). Fixa dem punkt för punkt. En fullständig omskrivning är bara meningsfull när arkitekturen är fundamentalt felaktig — men i de flesta fall kan du fixa befintlig kod iterativt utan att förlora det arbete som gjorts hittills.
Vanligvis ikke. Start med en revisjon. Identifiser kritiske mangler (sikkerhet, database, konfigurasjon). Fiks dem punkt for punkt. En fullstendig omskriving gir bare mening når arkitekturen er fundamentalt feil — men i de fleste tilfeller kan du fikse eksisterende kode iterativt uten å tape arbeidet som er gjort så langt.
Platforma nie równa się produkcji. Vercel i Netlify to świetne narzędzia do hostingu, ale sam hosting to nie jest «produkcja». Nadal potrzebujesz poprawnej konfiguracji CORS, monitoringu, obsługi błędów, bezpieczeństwa, właściwej bazy danych i testów obciążeniowych. Przycisk «Deploy» to początek, nie koniec.
Platform doesn’t equal production-ready. Vercel and Netlify are great hosting tools, but hosting alone isn’t “production.” You still need proper CORS configuration, monitoring, error handling, security, a proper database, and load testing. The “Deploy” button is the beginning, not the end.
Plattform är inte lika med produktionsklar. Vercel och Netlify är utmärkta hostingverktyg, men hosting ensamt är inte “produktion”. Du behöver fortfarande korrekt CORS-konfiguration, övervakning, felhantering, säkerhet, en riktig databas och belastningstester. Knappen “Deploy” är början, inte slutet.
Plattform er ikke lik produksjonsklar. Vercel og Netlify er flotte hostingverktøy, men hosting alene er ikke «produksjon». Du trenger fortsatt riktig CORS-konfigurasjon, overvåkning, feilhåndtering, sikkerhet, en skikkelig database og belastningstesting. «Deploy»-knappen er begynnelsen, ikke slutten.
Pomożemy Ci zidentyfikować i naprawić każdy z tych problemów. Audyt, naprawa, wdrożenie — od prototypu do produkcji. We’ll help you identify and fix every one of these issues. Audit, fix, deploy — from prototype to production. Vi hjälper dig identifiera och fixa vart och ett av dessa problem. Granskning, fix, driftsättning — från prototyp till produktion. Vi hjelper deg identifisere og fikse hvert av disse problemene. Revisjon, fiks, distribusjon — fra prototype til produksjon.
Zarezerwuj bezpłatną rozmowę → Book a free call → Boka ett gratis samtal → Bestill en gratis samtale →