# Lanseringsplan – från namnbeslut till butik > Körbar runbook. Allt som går att förbereda utan namn/konton är REDAN gjort > och verifierat (se STATUS.md). Stegen nedan är i ordning; varje steg listar > vem/vad som krävs. Kommandon körs från repo-roten om inget annat anges. ## Fas 0 – Namnbeslut (Johan) 1. Uppdatera `brand.config.json`: name, slug, urlScheme, iosBundleId, androidPackage, apiDomain, adminDomain, supportEmail. (ENDA kodändringen.) 2. Lägg det gamla platshållarnamnet i `FORBIDDEN`-listan i `scripts/brand-guard.sh` så CI vaktar även mot återinträde. 3. Verifiera: `pnpm typecheck && pnpm test && pnpm build && ./scripts/brand-guard.sh` 4. Registrera domäner (apiDomain, adminDomain) + e-postdomän med SPF/DKIM/DMARC. ## Fas 1 – Infrastruktur (ops, ~en halvdag) 1. **RDS**: kör `infrastructure/deployment/create-database.sql` som master (skapar databas, minsta-privilegie-användare och sök-extensions). 2. **Secrets**: generera och lägg i AWS Secrets Manager/SSM: ```bash # Kör tre gånger – JWT_ACCESS_SECRET, JWT_REFRESH_SECRET, ENTITLEMENT_SIGNING_SECRET node -e "console.log(require('crypto').randomBytes(48).toString('base64url'))" ``` Fyll `/opt/-platform/secrets/*.env` enligt `.env.example` (chmod 600). Produktionen VÄGRAR starta med dev-hemligheter eller AAMOS_MODE=mock. 3. **S3**: skapa bucket `-production`, block public access, SSE-S3, lifecycle: `temporary/` 7 dagar, `scans/` 90 dagar. IAM-roll `-app` med åtkomst ENDAST till denna bucket (policy i infrastructure/security/). 4. **Server**: dedikerad Linux-användare, Docker, reverse proxy med TLS mot `127.0.0.1:4100`. Deploy: `infrastructure/deployment/deploy.sh` (kräver pg_dump-backup före migrationer – inbyggt). 5. **Larm**: sätt `ERROR_WEBHOOK_URL` (Slack/Discord-webhook) – 5xx och fallerade jobb postas automatiskt. 6. **Backup-övning mot produktion**: `DATABASE_URL=… ADMIN_DATABASE_URL=… ./infrastructure/deployment/backup-restore-test.sh` (protokoll arkiveras i infrastructure/backups/; upprepa kvartalsvis). ## Fas 2 – AAMOS på riktigt (störst teknisk risk – gör tidigt) 1. Sätt `AAMOS_MODE=http`, `AAMOS_API_URL`, `AAMOS_API_KEY` mot AAMOS staging. 2. Kör utvärderingssviten: `pnpm eval:aamos` – samma svit som körs mot mocken; resultatet loggas i ai_eval_runs och syns i adminpanelen. UNDERKÄND = åtgärda innan vidare. 3. Regel därefter (spec §40): ingen modell-/promptändring i AAMOS tas i produktion utan godkänd `pnpm eval:aamos`-körning. 4. Personuppgiftsbiträdesavtal med AAMOS-driften (juridik, fas 5). ## Fas 3 – E-postleverantör 1. Välj SES/Postmark/Resend. Implementera transporten i `apps/api/src/lib/mailer.ts` (SmtpMailerPlaceholder – en klass, ~20 rader). 2. Sätt `EMAIL_MODE=smtp` + leverantörsnycklar. Mallar och flöden (verifiering + lösenordsåterställning) är klara och E2E-testade i log-läge. 3. Verifiera DKIM/SPF på e-postdomänen; skicka testmejl till Gmail/Outlook. ## Fas 4 – Butikerna (kräver namn + konton) 1. Apple Developer Program + Play Console-konto. 2. App Store Connect/Play Console: skapa apparna med `iosBundleId`/`androidPackage` och produkt-ID:n (`._monthly` / `_monthly` – se PLAN_DEFINITIONS; genereras ur brand-konfig). 3. Fyll i `apps/mobile/eas.json` submit-fälten; `eas build --profile production`. 4. Implementera butiksverifiering i produktionsläge (`packages/subscriptions/src/stores.ts`: App Store Server API v2 + Play Developer API – sandbox-flödet och entitlement-modellen är klara). 5. Push-notiser: `EXPO_PUSH_ENABLED=true` (tokenhantering + mallar klara). 6. Store-metadata per marknad: utkast i `docs/22-butiksmetadata.md`. 7. TestFlight/interna testare → rätta → skicka till granskning. ## Fas 5 – Juridik & innehåll (parallellt med fas 1–4) 1. Integritetspolicy + användarvillkor: UTKAST i `docs/23-juridik-utkast.md` – **kräver granskning av jurist före publicering**. 2. Biträdesavtal: AWS + AAMOS-driften. 3. Recept: fler än dagens 22 seedade – M3-flödet (AI-utkast → granska → publicera per språk) är byggt för att skala innehållet. 4. Licensgranskning innan Livsmedelsverket/OFF-connectorerna aktiveras. ## Fas 6 – Genrep & lansering 1. `pnpm typecheck && pnpm test && pnpm build` grönt i CI (inkl. varumärkesvakt). 2. Lasttest mot produktionsmiljön: `API_BASE_URL=https:// node scripts/loadtest.mjs` (lokala referensvärden i docs/24-lasttest.md). 3. `pnpm eval:aamos` mot produktions-AAMOS – GODKÄND. 4. Aktivera admin-2FA för samtliga admin-konton (adminpanelen → 2FA). 5. Soft launch: Sverige först (spec-fas i7), sedan marknader per marknadsprofilerna (EU/GB/US/CA är seedade och verifierade). ## Checklista "dagen före" - [ ] Backup-restore-protokoll < 3 månader gammalt - [ ] ERROR_WEBHOOK_URL testad (kasta ett testfel i staging) - [ ] healthz/readyz gröna bakom TLS - [ ] Admin-2FA aktiverat för alla admins - [ ] eval:aamos GODKÄND mot produktion - [ ] Butiksgranskningen godkänd i båda butikerna