Files
Cibello-app/docs/21-lanseringsplan.md
T

5.0 KiB
Raw Blame History

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:
    # 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 14)

  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