Initial commit (unpacked platform)

This commit is contained in:
Sven (AAMOS AI)
2026-08-05 19:21:11 +07:00
commit ac5340195a
314 changed files with 57584 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
# 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) |