rebreak-monorepo/ops/MAESTRO_HOSTING_DECISION.md
chahinebrini e76be7ee78 feat(profile): Profile-Page komplett + Header-Dropdown + UI-Pattern-Fixes
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).
2026-05-07 18:22:58 +02:00

11 KiB
Raw Blame History

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 sichTESTING_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