# 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/<slug>-platform/secrets/*.env` enligt `.env.example` (chmod 600).
   Produktionen VÄGRAR starta med dev-hemligheter eller AAMOS_MODE=mock.
3. **S3**: skapa bucket `<slug>-production`, block public access, SSE-S3,
   lifecycle: `temporary/` 7 dagar, `scans/` 90 dagar. IAM-roll `<slug>-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 (`<iosBundleId>.<plan>_monthly` / `<plan>_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://<apiDomain> 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
