Profile (3 Iterationen):
- app/profile/index.tsx + components/profile/* (Header, StatsBar, Approved,
Streak, UrgeStats, Demographics, DigaMissionBanner)
- echte Live-Daten via useMe-Hook (Avatar/Nickname/Plan/Email/Provider-Pill)
- Demographics mit echten Inputs (TextInput + Bottom-Sheet-Selects),
debounced auto-save, Pro-Trial-Reward-Banner, Mikro-Why-Texte
- Approved Domains als plain integer (KEIN Plan-Slot/Cap)
- Friendly Hint-Text statt Progress-Bar (alignSelf:'stretch' Pattern)
- StatsBar zentriert mit 3 prominenten Cards (vertikale Dividers)
- Cooldown-Timeline als Liste mit 1px-Rail
- ApprovedDomainsList: Collapse-Chevron rechts in Title-Row (Pattern-Fix)
- Eigene vs fremde Profile-Ansicht streng getrennt (DSGVO/Anonymität)
Header-Dropdown (kein 3-Punkte-Icon):
- Avatar als Trigger im AppHeader (User-Wunsch)
- Custom-Modal beide Plattformen, Card-Style
- SOS prominent oben (nur Wort 'SOS' rot, Tagline 'wir sind für dich da' klein darunter)
- Profile/Settings/Games/Debug(__DEV__)/Logout
- Logout neutral (nicht rot — Recovery-tonal)
- AppHeader: neue showBack + title Props für Sub-Routes
Routes (Stub bis Phase C):
- app/profile/[userId].tsx — anonym (nur public-Stats)
- app/settings.tsx — Coming-Soon-Skeleton
- app/games.tsx — Standalone Games-Page mit GameCard-Grid
- app/debug.tsx — __DEV__-only
Game-Picker (Migration aus Nuxt):
- components/games/{GameCard, StarRating, GameRatingStars}
- 2x2 Grid, 56pt SVG-Icons (inline aus components/urge/gameSvgs.ts)
- Live-Backend /api/games/ratings (silent-fail)
- Re-use UrgeGames.tsx ohne TTS/Cooldown-Loop
UI-Pattern-Fixes (alle aus screenshot-User-Feedback 2026-05-07):
- Snake-Bug (food-pellet React-18-StrictMode-Reducer-double-call) gefixt
- Snake-Buttons platform-native (iOS-blue / Android-ripple)
- Tetris-Margins (16px paddingHorizontal)
- PostCard-Buttons Apple-44pt-Hit-Area (Image-Select, Image-Remove,
Cancel, Share-Pill — via hitSlop)
- ProfileHeader Demographics-Hint: alignSelf:'stretch' Pattern
- ApprovedDomainsList Collapse: Title flex:1 + Chevron rechts
- ProtectionDetailsSheet FAQ-Items: alignSelf:'stretch' defensive
- AppHeader Back-Button: neue showBack-Prop + chevron-back
Memory + Plan-Docs:
- 17 Memory-Files dokumentieren System-Wissen + Patterns
- ops/{CUTOVER, UI_MIGRATION, PROFILE_PAGE, WEBHOOK, GAMES_1V1,
RELEASE_READINESS, TESTING_STATE, MAESTRO_HOSTING}_*.md
Backend bleibt unverändert (Tier-LLM + Nickname + sort:latency
sind seit gestern deployed).
224 lines
11 KiB
Markdown
224 lines
11 KiB
Markdown
# Maestro Hosting — Decision Memo
|
||
|
||
Author: Backyard (Infrastruktur) · Stand: 2026-05-07 · Status: Recon-Empfehlung, READ-ONLY
|
||
|
||
User-Frage (2026-05-08): „lohnt sich maestro für uns oder reicht self hosted auf hetzner neue server mit backyard checken"
|
||
|
||
Dieses Doc ist die Antwort. Kurzfassung in einem Satz:
|
||
**Maestro Cloud (Starter ~10 EUR/Monat oder Free-Tier zuerst) nehmen — Self-Host
|
||
auf Hetzner lohnt sich für unsere Team-Größe + Stack nicht, vor allem weil iOS
|
||
auf Linux prinzipiell nicht testbar ist und unser CX23-Server bereits ausgelastet
|
||
ist.**
|
||
|
||
---
|
||
|
||
## 1. Hard-Constraint: iOS lässt sich auf Linux nicht testen
|
||
|
||
Apple-Lizenz-Restriction: **iOS-Simulator läuft ausschließlich auf macOS.** Hetzner
|
||
liefert (im EU-Standard-Tier) keine Mac-Hardware. Linux-VMs auf Hetzner können
|
||
nur Android-Emulators hosten. Das heißt:
|
||
|
||
- **Self-Host auf einem Hetzner-Linux-Server kann maximal die Android-Hälfte
|
||
unserer E2E-Suite abdecken.**
|
||
- iOS-Tests müssten parallel auf einem anderen Pfad laufen:
|
||
- (a) lokaler Mac-Build (User-Hardware) — nicht CI-fähig
|
||
- (b) Mac-mini bei MacStadium o.ä. — ~60-120 EUR/Monat
|
||
- (c) GitHub-Actions macOS-Runner — ~0.08 USD/Min, pay-per-use
|
||
- (d) Maestro-Cloud nur für iOS, self-host für Android — Hybrid
|
||
|
||
Jede dieser Optionen treibt entweder Kosten oder Wartungs-Komplexität.
|
||
|
||
**Konsequenz:** „Self-Hosted-Maestro auf Hetzner" ist immer ein Hybrid-Setup,
|
||
nie eine vollständige Lösung. Wer „self-hosted" sagt, meint praktisch entweder
|
||
*nur Android* oder *Hybrid mit zweitem Pfad für iOS*.
|
||
|
||
---
|
||
|
||
## 2. Performance-Risk auf existierendem CX23
|
||
|
||
Der dedicated rebreak-server ist eine **CX23: 2 vCPU x86, 4 GB RAM, 40 GB SSD,
|
||
2 GB swap** (siehe `reference_rebreak_server.md`). Aktuelle Last:
|
||
|
||
- `rebreak-staging` (Nuxt-Server, Nitro)
|
||
- `rebreak-imap-staging`, `rebreak-idle-staging` (Mo's IMAP-Stack)
|
||
- `rebreak-webhook` (Auto-Deploy-Listener)
|
||
- `pnpm build` während Deploy (peakt RAM)
|
||
|
||
Ein Android-Emulator braucht **2-4 GB RAM** + 1-2 vCPU für akzeptable Boot-Zeit
|
||
und stabile Test-Runs (bei `-no-window -no-audio -gpu swiftshader_indirect` am
|
||
unteren Ende). Das **kollidiert direkt** mit dem Build-Peak. OOM-Risk auf 4 GB
|
||
RAM ist real und wird in `feedback_deploy_workflow.md` schon ohne Maestro
|
||
notiert.
|
||
|
||
**Heißt:** wir KÖNNEN den CX23 nicht zusätzlich mit Android-Emulator beladen,
|
||
ohne Production-Risiko. Wir bräuchten zwingend einen **zweiten dedicated
|
||
CI-Server** (mindestens CX22 ~5 EUR/Monat netto, eher CX32 mit 8 GB RAM
|
||
~9-11 EUR/Monat um Reserve zu haben, weil Emulator + Maestro-CLI + Test-Runner
|
||
+ ggf. paralleles Android-Build sich gerne überlappen).
|
||
|
||
Damit ist der „self-hosted ist gratis"-Mythos schon entzaubert: wir reden
|
||
realistisch über **zusätzlich ~10 EUR/Monat Hetzner-Server** plus mehrere
|
||
Stunden Setup plus laufende Wartung.
|
||
|
||
---
|
||
|
||
## 3. Cost-Comparison
|
||
|
||
Annahmen: ~10 Test-Runs/Monat (TestFlight-Sprint-Phase, später ggf. mehr), je
|
||
Run ~5 Minuten Maestro-Time pro Plattform, iOS+Android parallel.
|
||
|
||
| Variante | Direkte Kosten/Monat | Direkte Kosten/Jahr | Setup-Aufwand | Laufende Wartung |
|
||
|----------|----------------------|---------------------|---------------|------------------|
|
||
| **(A) Maestro Cloud Starter** | ~10 EUR (laut Ahmed-Quote, plus Free-Tier-Monatsminuten) | ~120 EUR | 30-60 min (CLI install + cloud-token) | quasi 0 — Maestro betreibt Devices |
|
||
| **(B) Self-Host Android-only auf Hetzner (neuer CX22/32)** | 5-11 EUR (+ Strom-Pool inklusive) | 60-130 EUR | 4-8 h (Server provision + Android-SDK + Emulator-image + KVM-acceleration check + Maestro-CLI + Webhook/Trigger) | ~30 min/Monat (image-updates, Emulator-state-Drift) |
|
||
| **(B+) Self-Host Android + GitHub-Actions-iOS** | 5-11 EUR Hetzner + ~4 EUR GitHub macOS-Minutes (10×5 min) | 110-180 EUR | 6-10 h (zwei Pfade synchron halten) | ~1 h/Monat (zwei Pipelines pflegen) |
|
||
| **(C) Pure self-host iOS + Android (eigener Mac-mini bei MacStadium)** | 60-120 EUR Mac + 5-11 EUR Hetzner | 780-1570 EUR | 8-16 h | ~2 h/Monat (zwei Hosts) |
|
||
| **(D) GitHub Actions Matrix-Build (macOS-runner für beide)** | ~8 EUR (10×5 min iOS + Android Linux gratis) | ~100 EUR | 2-3 h Workflow-yml | ~30 min/Monat |
|
||
|
||
**Beobachtung:** Die nominellen Kosten von (A), (B), (B+) und (D) liegen alle
|
||
im Bereich 60-180 EUR/Jahr. Der echte Tradeoff sind **Setup-Aufwand und
|
||
Wartungs-Komplexität**, nicht Cash.
|
||
|
||
---
|
||
|
||
## 4. Aufwand-Schätzung pro Variante
|
||
|
||
### (A) Maestro Cloud
|
||
- **Setup:** Account anlegen, `MAESTRO_CLOUD_API_KEY` als GitHub-Secret, ein
|
||
einziger CLI-Aufruf in der Action. **30-60 Min.**
|
||
- **Wartung:** Maestro pflegt Device-Pool, Updates, OS-Versionen. **Nahe 0.**
|
||
- **Risk:** External Vendor — wenn Maestro down, blockiert PR-Test. Akzeptabel
|
||
weil Tests nicht Production-blocking sind, nur PR-Gate.
|
||
|
||
### (B) Self-Host Android-only
|
||
- **Setup:** Hetzner-Server provisionieren (CX22/32), Ubuntu, Android-SDK +
|
||
cmdline-tools + emulator-image installieren, KVM/HAXM-Acceleration testen
|
||
(auf Hetzner-Cloud bedingt verfügbar — `/dev/kvm` muss exposed sein, je
|
||
nach Hetzner-Tier OK), Maestro-CLI installieren, Webhook-Endpoint bauen
|
||
oder GitHub-Actions self-hosted-runner registrieren. **4-8 h.**
|
||
- **Wartung:** Android-System-Image-Updates (alle 2-3 Monate), Emulator-state
|
||
kann korrupt werden, Maestro-CLI-Updates, Disk-cleanup für AVD-snapshots.
|
||
**~30 Min/Monat im stabilen Zustand, gelegentlich mehrere Stunden bei Bruch.**
|
||
- **Risk:** Wenn Server down, Test-Pipeline down. Plus: ein zweiter Server
|
||
vergrößert die Hetzner-Sprawl, gegen die wir gerade in
|
||
`project_rebreak_dedicated_hetzner.md` fokussiert haben.
|
||
|
||
### (B+) Hybrid Self-Host Android + Cloud-iOS oder GH-Actions-iOS
|
||
- **Setup:** wie (B) **plus** zweiter Pfad für iOS. **6-10 h.**
|
||
- **Wartung:** Zwei Pipelines, zwei Auth-Token-Pflege, zwei verschiedene
|
||
Reporting-Outputs. **~1 h/Monat.**
|
||
- **Risk:** Pipeline-Drift — Android-Test-Setup divergiert von iOS-Test-Setup,
|
||
Bugs werden auf einer Plattform gefangen, auf der anderen nicht.
|
||
|
||
### (C) Pure Self-Host inkl. Mac
|
||
- **Setup:** Mac-mini-Provider auswählen (MacStadium, Scaleway-Apple-M1, Mac
|
||
in Cloud), Maestro auf macOS installieren, iOS-Sim einrichten, plus Hetzner
|
||
für Android. **8-16 h.**
|
||
- **Wartung:** Zwei OS, zwei Toolchains, Apple-Xcode-Updates. **~2 h/Monat.**
|
||
- **Risk:** Hoch. Aufwand steht in keinem Verhältnis zum Output für unsere
|
||
Team-Größe (User + ein paar Sub-Agents).
|
||
|
||
### (D) GitHub Actions Matrix
|
||
- **Setup:** Eine `.yml` mit zwei Jobs (`maestro-ios` auf macos-latest,
|
||
`maestro-android` auf ubuntu-latest mit `reactivecircus/android-emulator-runner`).
|
||
**2-3 h.**
|
||
- **Wartung:** Action-Updates, ggf. Cache-Invalidierung. **~30 Min/Monat.**
|
||
- **Risk:** macOS-Minutes können bei vielen Test-Runs schnell teuer werden
|
||
(z.B. 100 Runs/Monat × 5 Min = 40 USD). Bei aktueller Run-Frequenz aber OK.
|
||
|
||
---
|
||
|
||
## 5. Empfehlung — Lieblings-Pfad
|
||
|
||
### Lieblings-Pfad: **Maestro Cloud Starter (Variante A)**
|
||
|
||
**Begründung:**
|
||
1. **iOS-Hard-Constraint** löst sich elegant — Cloud betreibt Apple-Devices.
|
||
2. **Setup-Aufwand minimal** — eine Stunde max, keine Hetzner-Sprawl.
|
||
3. **Hetzner-Strategie respektiert** — der CX23 bleibt fokussiert auf
|
||
`rebreak-staging`/`rebreak-prod`-Workload, kein OOM-Risk durch Emulator-Last.
|
||
4. **Ahmed-Empfehlung deckt sich** — `TESTING_STATE.md §5.2` nennt Maestro mit
|
||
Cloud-Run als bevorzugten Pfad genau aus diesem Grund.
|
||
5. **Cash-Risk niedrig** — 120 EUR/Jahr ist Rauschen verglichen mit
|
||
DiGA-Pen-Test (5-15k EUR), Apple-Developer-Program (99 USD) etc.
|
||
6. **Reversibilität hoch** — wenn Cloud-Limits gesprengt werden, lässt sich
|
||
später auf (B+) oder (D) wechseln. Maestro-yml-Flows sind portable.
|
||
|
||
**Plan-Form:**
|
||
- Anfang: **Free-Tier prüfen** (Maestro hat ein gratis Kontingent für kleine
|
||
Teams — verifizieren beim Account-Anlegen). Wenn Free-Tier ausreicht für
|
||
unsere ~10 Runs/Monat, kostet's 0.
|
||
- Wenn Free-Tier nicht reicht: Starter-Plan (~10 EUR/Monat laut Ahmed-Quote).
|
||
- Maestro-CLI lokal für Dev-Iteration, Cloud für CI-Gate auf `main`.
|
||
|
||
### Plan B: **GitHub Actions Matrix (Variante D)**
|
||
|
||
Wenn Maestro Cloud aus irgendeinem Grund nicht passt (z.B. EU-Datenschutz-Bedenken
|
||
weil Test-Recordings auf US-Servern liegen, oder Pricing-Änderung):
|
||
|
||
- GitHub-Actions-Matrix mit `macos-latest` für iOS und `ubuntu-latest` +
|
||
`reactivecircus/android-emulator-runner` für Android.
|
||
- Test-Runs nur auf `main`-Push und `workflow_dispatch`, nicht auf jedem PR
|
||
→ hält macOS-Minutes-Verbrauch klein.
|
||
- Aufwand: 2-3 h Setup, ~30 Min/Monat Wartung, ~100 EUR/Jahr.
|
||
|
||
### Anti-Empfehlung: **Self-Host auf Hetzner (B oder B+)**
|
||
|
||
Würde ich nur empfehlen wenn:
|
||
- DSGVO/DiGA-Audit verlangt explizit, dass Test-Pipelines auf EU-eigener
|
||
Infrastruktur laufen (unwahrscheinlich, weil Test-Recordings keine
|
||
Produktiv-User-Daten enthalten).
|
||
- Wir mehr als ~50 Test-Runs/Tag haben (sind wir nicht).
|
||
- Wir bereits dedicated CI-Infrastruktur betreiben (haben wir nicht — der
|
||
rebreak-server ist Production).
|
||
|
||
In allen anderen Fällen ist Self-Host für unsere Größe **Over-Engineering**
|
||
und kollidiert mit der Hetzner-Konsolidierungs-Linie aus den letzten
|
||
Backyard-Sessions.
|
||
|
||
---
|
||
|
||
## 6. Setup-Estimate für die Empfehlung (Pfad A)
|
||
|
||
| Schritt | Owner | Aufwand |
|
||
|---------|-------|---------|
|
||
| Maestro-Cloud-Account anlegen + Free-Tier-Limits checken | User | 15 Min |
|
||
| `MAESTRO_CLOUD_API_KEY` GitHub-Secret hinterlegen | User | 5 Min |
|
||
| `.github/workflows/rebreak-test.yml` Job `maestro-cloud` schreiben (`maestro cloud --apiKey $MAESTRO_CLOUD_API_KEY .maestro/`) | Ahmed/Backyard | 30 Min |
|
||
| Erster Test-Run gegen Staging-Build von TestFlight-IPA | Ahmed | 30 Min |
|
||
| Smoke-Flow `auth/sign-in.yaml` entstehen lassen + via Cloud verifizieren | Ahmed | bereits in TESTING_STATE Roadmap (1 h) |
|
||
| **Total bis erste grüne Cloud-Run** | | **~2 h** zusätzlich zur Maestro-Flow-Entwicklung selbst |
|
||
|
||
Vergleich Self-Host: 4-8 h Setup + Wartungs-Last + zweiter Hetzner-Server. Cloud
|
||
gewinnt deutlich.
|
||
|
||
---
|
||
|
||
## 7. Offene Punkte (User-Decision)
|
||
|
||
1. **Maestro-Cloud-Pricing-Verifikation:** „~10 EUR/Monat" ist Schätzung aus
|
||
Ahmed's Notiz. User sollte beim Account-Anlegen den aktuellen Starter-Plan-Preis
|
||
und das Free-Tier-Kontingent verifizieren. Backyard hat bewusst nicht selbst
|
||
den Maestro-Pricing-Endpoint gefetcht (kein Web-Tool im Recon-Scope).
|
||
2. **Cloud-Datenschutz vs DSGVO:** Maestro-Cloud-Server-Region prüfen (US vs EU).
|
||
Test-Flows enthalten keine echten User-Daten, sondern Test-Account-Daten —
|
||
Risk niedrig, aber Hans-Müller (DSFA) sollte das im Datenfluss-Diagramm
|
||
notieren.
|
||
3. **Wenn (D) als Plan B aktiv wird:** Run-Frequenz kapeln (max 1× pro PR auf
|
||
main, nicht auf jedem Branch-Push), sonst eskalieren macOS-Minutes.
|
||
|
||
---
|
||
|
||
## 8. TL;DR für User
|
||
|
||
- **Maestro Cloud Starter (~10 EUR/Monat, ggf. Free-Tier am Anfang) nehmen.**
|
||
- iOS lässt sich nicht auf Linux testen — Self-Host auf Hetzner ist immer
|
||
Hybrid und kostet mehr Stunden als es spart.
|
||
- Unser CX23 ist schon nah an OOM bei Build-Peaks; Android-Emulator dazu wäre
|
||
Production-Risk.
|
||
- Plan B falls Cloud nicht passt: GitHub-Actions-Matrix mit macOS-runner für
|
||
iOS, ubuntu-runner für Android. ~100 EUR/Jahr, kein eigener Server.
|
||
- Setup für Pfad A: ~2 h gesamt bis zur ersten grünen Cloud-Run.
|
||
|
||
Ende. — Backyard
|