Använd denna checklista för överlämning av källkod för att exportera, dokumentera, rotera hemligheter, köra migrationer, validera byggen och bekräfta distributionsägarskap med kunder.

En överlämning av källkod är ögonblicket då projektet slutar vara "något byrån kan köra" och blir "något kunden kan äga." Utan en tydlig överlämning dyker vanliga problem upp snabbt: appen byggs bara på en laptop, produktion beror på en hemlighet ingen kan hitta, eller en liten uppdatering blir till dagars detektivarbete.
Målet med en checklista för överlämning av källkod är enkelt: efter överföringen ska kunden kunna bygga, köra och distribuera produkten utan att behöva byrån på snabbval. Det betyder inte "aldrig någon support." Det betyder att grunderna är upprepbara och dokumenterade, så nästa person kan ta vid med förtroende.
Vad som räknas som leverabler bör vara uttryckligt. Som minimum inkluderar en komplett överlämning vanligtvis:
Omfång är lika viktigt som innehåll. Vissa överlämningar täcker bara en miljö (till exempel produktion). Andra inkluderar dev, staging och production med separata inställningar och processer. Om du inte namnger vilka miljöer som ingår antar folk olika saker — och där uppstår driftstörningar.
Ett praktiskt sätt att definiera framgång är ett verifieringstest: en person som inte byggde appen ska kunna exportera koden (till exempel från en plattform som Koder.ai), följa dokumentationen, sätta miljövariabler, köra migrationer, bygga och distribuera till avtalad miljö.
Denna checklista fokuserar på teknisk beredskap: miljövariabler, rotation av hemligheter, databasmigrationer, deploy-skript och byggverifiering. Den täcker inte juridiska villkor, kontrakt, IP-klausuler eller betalningstvister. De är viktiga också, men hör hemma i ett separat avtal.
En ren överlämning börjar innan någon export sker. Om ni är överens om vem som äger vad och när, undviker ni sista-minuten-överraskningar som brutna distributioner, obetalad hosting eller saknad åtkomst.
Välj ett överlämningsdatum och definiera ett freeze-fönster (ofta 24–72 timmar) där endast brådskande fixar går in. Det håller den exporterade koden och det körande systemet i synk. Om en hotfix behövs under freeze, dokumentera exakt vad som ändrades och se till att det ingår i slutgiltig export.
Bestäm vem som kommer att äga DNS, cloud-hosting och eventuella betalda tjänster efter överlämningen. Detta är inte bara pappersarbete. Om faktureringen ligger kvar på byråns kort kan tjänster pausas senare utan förvarning.
Ett snabbt sätt att göra det konkret:
Skriv ner detta på enkelt språk så båda sidor kan följa.
Kom överens om vilka miljöer som finns (local, staging, production) och var varje körs. Notera om staging är en separat server, en separat databas eller bara en feature-flag. Om ni använt en plattform som Koder.ai, bekräfta också vad som hostas där vs vad som förväntas köra i kundens infrastruktur efter export.
Vänta inte till sista dagen med att begära åtkomst. Se till att rätt personer kan nå det de behöver: repot, CI, hosting, databasen och e-postleverantören.
Kom även överens om slutgiltigt acceptanstest och sign-off-process. Till exempel: "Kunden kan bygga från en ren maskin, köra migrationer, distribuera till staging och klara smoke-testet. Därefter signerar båda sidor skriftligt."
En bra checklista för överlämning av källkod börjar med ett repo som ett nytt team kan öppna och förstå på några minuter. Bekräfta vad som ingår (appkod, konfigmallar, skript) och vad som medvetet saknas (riktiga hemligheter, privata nycklar, stora genererade filer). Om något är exkluderat, säg var det finns och vem som äger det.
Håll strukturen förutsägbar. Sikta på tydliga toppnivåmappar som frontend/, backend/, mobile/, infra/, scripts/ och docs/. Om projektet är ett monorepo, förklara hur delarna förhåller sig och hur man kör varje del.
Din README ska vara användbar för någon som inte byggde projektet. Den bör täcka förutsättningar och snabbaste vägen till ett fungerande dev-kör utan gissningar.
Inkludera en kort, mänsklig README-sektion som svarar på:
Lägg till enkla arkitekturbeskrivningar på vanligt språk: vad pratar med vad och varför. En liten bild är valfri, men några meningar räcker oftast. Exempel: "React-fronten anropar Go-API:t. API:t läser och skriver till PostgreSQL. Bakgrundsjobb körs som en separat worker-process."
Slutligen, inkludera en versionerad changelog eller releasenoter för överlämningsbygget. Detta kan vara en CHANGELOG.md eller en kort "handoff release notes"-fil som anger exakt commit/tagg, vad som levererades och kända problem.
Om koden exporterades från en plattform som Koder.ai, notera det genererade projekttypen (web, server, mobile), den förväntade toolchainen (t.ex. React, Go, PostgreSQL, Flutter) och de stödda OS/tooling-versionerna som kunden bör använda för att reproducera bygget.
Miljövariabler är ofta anledningen till att en "fungerande app" går sönder direkt efter överlämning. En bra checklista behandlar dem som en del av produkten, inte som en eftertanke.
Börja med att skriva en inventering som ett nytt team kan följa utan gissningar. Håll den på enkelt språk och inkludera ett exempel på värdeformat (inte riktiga hemligheter). Om en variabel är valfri, säg vad som händer när den saknas och vilken default som används.
Ett enkelt sätt att presentera inventariet är:
Peka ut miljöspecifika skillnader tydligt. Till exempel kan staging peka på en testdatabas och en sandboxbetalningsleverantör, medan produktion använder live-tjänster. Notera också värden som måste matcha över system, som callback-URL:er, tillåtna origins eller mobilappens bundle identifiers.
Dokumentera var varje värde finns idag. Många team sprider värden över platser: lokala .env-filer för utveckling, CI-variabler för byggen och hosting-inställningar för runtime. Om du använde en plattform som Koder.ai för att exportera appen, inkludera en .env.example-fil och en kort notering om vilka variabler som måste fyllas i före första bygget.
Bevisa slutligen att inga hemligheter gömmer sig i repot. Kontrollera inte bara nuvarande filer — granska commit-historiken efter oavsiktliga nycklar, gamla .env-filer eller kopierade credentials i exempelkonfigurationer.
Konkreta exempel: en React-frontend plus ett Go-API kan behöva API_BASE_URL för webben och DATABASE_URL plus JWT_SIGNING_KEY för backend. Om staging använder en annan domän, skriv båda värdena och säg var man ändrar dem så det nya teamet inte oavsiktligt skickar staging-inställningar till produktion.
En överlämning är inte klar förrän kunden kontrollerar varje credential appen behöver. Det innebär att rotera hemligheter, inte bara dela dem. Om en byrå (eller en tidigare konsult) fortfarande har fungerande nycklar har ni en öppning ni inte kan revidera.
Börja med att göra en fullständig inventering. Stanna inte vid databaslösenord. Inkludera tredjeparts-API-nycklar, OAuth-client secrets, webhook-signeringshemligheter, JWT-signeringsnycklar, SMTP-credentials, lagringsåtkomstnycklar och alla "tillfälliga" tokens som sitter i CI.
Här är en enkel checklista för rotationsdagen:
Efter rotation, bevisa att inget gick sönder. Kör snabba "riktiga användare"-tester istället för att bara kolla loggar.
Fokusera på flöden som beror på hemligheter:
Exempel: om du exporterade ett projekt från Koder.ai och appen använder en betalningsleverantör plus e-postleverans, rotera båda nycklarna, redeploya, kör en liten testtransaktion och skicka ett testmail. Först efter att dessa lyckats bör du återkalla byråägda nycklar.
Dokumentera slutligen var hemligheterna kommer att lagras framöver (vault, CI-variabler eller hosting-inställningar), vem som får ändra dem och hur man rullar tillbaka säkert om en rotation orsakar fel.
En överlämning kan se "klar" ut medan databasen är den del som går sönder först. Behandla migrationer och data som en egen produkt: versionshanterad, upprepningsbar och testad.
Börja med att skriva ner aktuell databasversion och var migrationerna ligger i repot. Var specifik: mappväg, namngivningsmönster och senaste migration-ID (eller tidsstämpel). Om ni använder PostgreSQL (vanligt med Go-backends), notera även eventuella nödvändiga extensioner.
Inkludera ett kort runbook som svarar på dessa frågor:
Rollback förtjänar ärlighet. Vissa ändringar är endast reversibla med en backup-återställning. Skriv ut det tydligt och kombinera det med ett backupsteg (snapshot före deploy, verifiera restore-process).
Innan överlämning är klar, kör migrationer på en kopia av produktionsdata om möjligt. Detta fångar långsamma frågor, saknade index och problem som bara uppstår på fulla dataset. Ett realistiskt test är att exportera koden, sätta miljövariabler, återställa en anonymiserad dump och sedan applicera migrationer från början. Den övningen validerar en stor del av en överlämning.
Om appen byggdes i en plattform som Koder.ai och sedan exporterades, dubbelkolla att migrationsfiler och eventuella seed-skript är inkluderade i exporten och fortfarande refereras korrekt av backendens startup-process.
En överlämning är bara komplett när någon annan kan bygga om appen från början på en ren maskin. Din checklista bör inkludera exakta byggkommandon, krav på versioner och det förväntade resultatet (t.ex. "web bundle i /dist", "API-binary-namn", "Flutter APK-plats").
Skriv ner verktyg och paket-hanterare ni faktiskt använder, inte vad ni tror ni använder. För en typisk stack kan detta vara Node.js (och npm eller pnpm) för React-webben, Go-toolchain för servern, PostgreSQL-klientverktyg för lokal setup och Flutter SDK för mobil.
Gör beroendeinstallationer förutsägbara. Bekräfta att lockfiler är committade (package-lock.json, pnpm-lock.yaml, go.sum, pubspec.lock) och gör en färsk installation på en ny dator eller ren container för att bevisa att det fungerar.
Beskriv vad CI gör, steg för steg, så det kan kopieras till en annan CI-leverantör vid behov:
Separera build-time config från runtime-config. Build-time config påverkar vad som kompileras (som en API-base-URL inbakad i en webbundle). Runtime-config injiceras när appen startar (som databas-URL:er, API-nycklar och feature-flaggor). Att blanda ihop dessa är en vanlig anledning till att "det fungerar i CI" men misslyckas efter distribution.
Ge ett enkelt lokalt verifieringsrecept. Även ett kort kommando-set räcker:
# Web
pnpm install
pnpm test
pnpm build
# API
go test ./...
go build ./cmd/server
# Mobile
flutter pub get
flutter test
flutter build apk
Om du exporterade från en plattform som Koder.ai, inkludera eventuella genererade CI-filer eller build-presets som användes under deploy så kunden kan reproducera samma bygge utanför plattformen.
En bra checklista för överlämning slutar inte vid "här är repot." Den förklarar också hur appen går från källkod till en körande tjänst, och vem som trycker på knappen.
Börja med att dokumentera hur distributioner sker idag: helt manuellt (någon kör kommandon på en server), CI-styrt (en pipeline bygger och deployar) eller via en hostad plattform. Inkludera var konfigurationer finns och vilka miljöer som finns (dev, staging, production).
Gör release-stegen upprepbara. Om processen beror på att en person kommer ihåg 12 kommandon, omvandla dem till skript och notera vilka behörigheter som krävs.
Ge kunden tillräckligt för att deploya dag 1:
Kom överens om förväntningar för driftstopp. Om "noll driftstopp" krävs, säg vad det betyder i praktiken (blue-green, rolling deploy, read-only-fönster för migrationer). Om driftstopp är acceptabelt, definiera ett tydligt fönster.
Statisk assets och caches är vanliga felkällor. Notera hur assets byggs och serveras, när man måste rensa caches och om en CDN är involverad.
En rollback bör vara ett kort, testat recept kopplat till en tagg eller release-ID. Exempel: deploya tidigare tagg, återställ tidigare databas-snapshot om behövligt och invalidatera caches.
Om appen skapades i Koder.ai och sedan exporterades, nämn sista kända-goda snapshot och exakt exportversion så kunden snabbt kan matcha kod till en fungerande release.
Verifiering är ögonblicket då du får veta om överlämningen är verklig. Målet är enkelt: någon ny ska kunna ta den exporterade koden, sätta upp den och få samma app att köra utan gissningar.
Innan du börjar, skriv ner vad som är "korrekt": appens version, aktuell commit/tagg (om du har den) och en eller två nyckelskärmar eller API-svar att jämföra med. Om exporten kom från en plattform som Koder.ai, notera snapshot- eller exporttidsstämpeln så du kan bevisa att du testade senaste tillståndet.
För smoke-tester, håll det kort och kopplat till risk:
Om något misslyckas, fånga det exakta kommandot, felutdata och vilka env-vars som användes. Den detaljen spar timmar när ägarskapet byter händer.
Det snabbaste sättet att förvandla en överlämning till en brandövning är att anta att "koden räcker." En bra checklista fokuserar på de små, tråkiga detaljerna som avgör om kunden faktiskt kan köra och ändra appen utan dig.
De flesta problemen faller i ett fåtal mönster:
Gör rotation och åtstramning av åtkomst till en schemalagd uppgift, inte ett "när vi hinner"-objekt. Sätt ett datum när byråkonton tas bort, servicenycklar genereras om och kunden bekräftar att de kan deploya med endast sina egna credentials.
För env-vars, gör en enkel inventering från tre platser: repot, CI-systemet och hosting-UI:t. Validera sedan genom att köra ett rent bygge från en färsk maskin eller container.
För migrationer, testa med samma databasroll som produktionsdeployen kommer att använda. Om produktion kräver upphöjda steg (som att aktivera en extension), skriv ner dem och gör ägarskapet tydligt.
Ett realistiskt exempel: efter export från Koder.ai deployar kunden framgångsrikt men bakgrundsjobben misslyckas eftersom en queue-URL bara sattes i hosting-panelen. En snabb env-var-audit hade fångat det. Kombinera det med en taggad release och en dokumenterad rollback (t.ex. "redeploy tag v1.8.2 och återställ senaste snapshot") så undviker ni driftstopp.
Om du bara behåller en sida från denna checklista, behåll denna. Målet är enkelt: en ren clone ska köra på en ny maskin, med nya hemligheter och en databas som kan gå framåt säkert.
Kör dessa kontroller på en laptop som aldrig sett projektet tidigare (eller i en ren container/VM). Det är snabbaste sättet att fånga saknade filer, dolda antaganden och gamla credentials.
En byrå lämnar över en React-frontend, ett Go-API och en PostgreSQL-databas. Kundteamet klonar repot, kopierar medföljande .env.example till verkliga env-vars och skapar helt nya credentials för databasen, e-postleverantören och eventuella tredjeparts-API:er. De kör go test (eller det avtalade testkommandot), bygger React-appen, applicerar migrationer på en färsk Postgres-instans och startar båda tjänsterna. Slutligen deployar de med det dokumenterade skriptet och bekräftar att samma commit kan byggas om senare.
Håll överlämningen kort och ägd. En 30–60 minuters genomgång slår oftast en lång dokumentation.