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).
11 KiB
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 buildwä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_KEYals 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/kvmmuss 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.mdfokussiert 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
.ymlmit zwei Jobs (maestro-iosauf macos-latest,maestro-androidauf ubuntu-latest mitreactivecircus/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:
- iOS-Hard-Constraint löst sich elegant — Cloud betreibt Apple-Devices.
- Setup-Aufwand minimal — eine Stunde max, keine Hetzner-Sprawl.
- Hetzner-Strategie respektiert — der CX23 bleibt fokussiert auf
rebreak-staging/rebreak-prod-Workload, kein OOM-Risk durch Emulator-Last. - Ahmed-Empfehlung deckt sich —
TESTING_STATE.md §5.2nennt Maestro mit Cloud-Run als bevorzugten Pfad genau aus diesem Grund. - Cash-Risk niedrig — 120 EUR/Jahr ist Rauschen verglichen mit DiGA-Pen-Test (5-15k EUR), Apple-Developer-Program (99 USD) etc.
- 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-latestfür iOS undubuntu-latest+reactivecircus/android-emulator-runnerfür Android. - Test-Runs nur auf
main-Push undworkflow_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)
- 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).
- 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.
- 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