# Namnbyte – status och runbook (spec §65)

## Status

**Namnet är inte beslutat.** Projektet använder neutrala platshållare
(`Matappen`, `com.example.matappen`, `api.example.com`) tills ett slutgiltigt
namn är valt. Varumärket definieras på EXAKT ett ställe: `brand.config.json`
i repo-roten. Ingen kod, dokumentation, databas, migrering eller
infrastrukturfil innehåller något riktigt varumärkesnamn.

## Så här styr `brand.config.json` allt

| Fält             | Används av                                                                                        |
| ---------------- | ------------------------------------------------------------------------------------------------- |
| `name`           | Mobilappens visningsnamn, iOS-behörighetstexter, alla UI-strängar (`{brand}` i i18n), admin-titel |
| `slug`           | BullMQ-könamn, healthz-tjänstnamn, S3-bucket-default (`<slug>-production`), Expo-slug             |
| `urlScheme`      | Deep links i mobilappen                                                                           |
| `iosBundleId`    | Expo iOS bundle ID, Apple-produkt-ID:n (`<iosBundleId>.<plan>_monthly`)                           |
| `androidPackage` | Expo Android-paket, Google Play-verifiering                                                       |
| `apiDomain`      | Dokumentation/drift; API:s bas-URL i produktion                                                   |
| `adminDomain`    | Adminpanelens produktionsdomän                                                                    |
| `supportEmail`   | Supportlänkar i appen                                                                             |

## Runbook vid namnbeslut

1. Uppdatera samtliga fält i `brand.config.json` (enda kodändringen).
2. Drift: sätt riktiga värden i produktions-`.env` om de ska avvika från
   brand-defaults (S3_BUCKET, APPLE_BUNDLE_ID, GOOGLE_PACKAGE_NAME – tomma
   värden faller automatiskt tillbaka på brand.config.json).
3. Butikskonsoler: skapa appen med `iosBundleId`/`androidPackage` och
   produkt-ID:n enligt tabellen ovan (App Store Connect + Play Console).
4. Domäner: registrera `apiDomain`/`adminDomain`, uppdatera TLS/reverse proxy.
5. Databas/infra: skapa databas + användare enligt
   `infrastructure/deployment/create-database.sql` (namn efter `slug`).
6. Verifiera: `pnpm typecheck && pnpm test && pnpm build` samt
   `grep -ri "<gamla namnet>"` ska ge noll träffar utanför `brand.config.json`.

## Vakt mot återinträde

- Inga hårdkodade namn i kod, tester, seed, docs eller infrastruktur –
  kontrollerat med grind-grep (se commit-historik).
- CI-förslag: lägg ett lint-steg som failar på varumärkesnamn utanför
  `brand.config.json` när namnet är beslutat.

## Deploya före namnbeslut? Gränsdragningen

| Åtgärd                               | Före namn? | Varför                                                                                                                                            |
| ------------------------------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| Staging i egen infra + testning      | ✅ Gör det | Noll varumärke i DB/API; namnbyte = konfigrad + omstart                                                                                           |
| Riktiga AAMOS + eval-svit            | ✅ Gör det | Största tekniska risken – avverka den tidigt                                                                                                      |
| Produktionsinfra (RDS, server, larm) | ✅ Går bra | Välj NEUTRALT S3-bucketnamn (buckets kan aldrig döpas om) och gärna en varumärkesfri infra-domän för API:t                                        |
| Riktiga användare                    | ⚠️ Undvik  | Fungerar tekniskt, men mejl hälsar med platshållarnamnet                                                                                          |
| App Store / Google Play-inlämning    | ❌ ALDRIG  | Bundle-ID och produkt-ID:n blir permanenta vid publicering – kan aldrig bytas, bara ersättas med ny app (recensioner/prenumeranter går förlorade) |
