fix(backend): alias NUXT_*_BOT_USER_ID env vars in start-staging.sh
Infisical staging holds the bot user IDs as NUXT_LYRA_BOT_USER_ID / NUXT_REBREAK_BOT_USER_ID, but nitro.config.ts reads process.env.LYRA_BOT_USER_ID (no NUXT_ fallback) and start-staging.sh had no alias for them → config.lyraBotUserId was empty → POST /api/admin/lyra-post threw 500 "LYRA_BOT_USER_ID nicht konfiguriert" (surfaced via the admin app proxy). Adds the alias + NITRO_ override exports, same pattern as the other keys. Also: ops/strategy/pricing-tiers.md — strategist's tier-pricing analysis, stress-test, downgrade-policy matrix, plan-change briefing-screen content + scenario test matrix (Task #8 Phase 1). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f6852be760
commit
1ad964f54b
@ -46,6 +46,8 @@ exec infisical run \
|
||||
export GOOGLE_API_KEY="${GOOGLE_API_KEY:-${NUXT_GOOGLE_API_KEY:-}}"
|
||||
export DEEPGRAM_API_KEY="${DEEPGRAM_API_KEY:-${NUXT_DEEPGRAM_API_KEY:-}}"
|
||||
export DATABASE_URL="${DATABASE_URL:-${NUXT_DATABASE_URL:-}}"
|
||||
export LYRA_BOT_USER_ID="${LYRA_BOT_USER_ID:-${NUXT_LYRA_BOT_USER_ID:-}}"
|
||||
export REBREAK_BOT_USER_ID="${REBREAK_BOT_USER_ID:-${NUXT_REBREAK_BOT_USER_ID:-}}"
|
||||
|
||||
# ─── NITRO_-Prefix für Runtime-Override des runtimeConfig ──────────
|
||||
[[ -n "${SUPABASE_URL:-}" ]] && export NITRO_SUPABASE_URL="$SUPABASE_URL" && export NITRO_PUBLIC_SUPABASE_URL="$SUPABASE_URL"
|
||||
@ -63,6 +65,8 @@ exec infisical run \
|
||||
[[ -n "${JWT_SECRET:-}" ]] && export NITRO_JWT_SECRET="$JWT_SECRET"
|
||||
[[ -n "${ENCRYPTION_KEY:-}" ]] && export NITRO_ENCRYPTION_KEY="$ENCRYPTION_KEY"
|
||||
[[ -n "${ADMIN_SECRET:-}" ]] && export NITRO_ADMIN_SECRET="$ADMIN_SECRET"
|
||||
[[ -n "${LYRA_BOT_USER_ID:-}" ]] && export NITRO_LYRA_BOT_USER_ID="$LYRA_BOT_USER_ID"
|
||||
[[ -n "${REBREAK_BOT_USER_ID:-}" ]] && export NITRO_REBREAK_BOT_USER_ID="$REBREAK_BOT_USER_ID"
|
||||
|
||||
exec '"$NODE_BIN"' '"$INDEX_MJS"'
|
||||
'
|
||||
|
||||
253
ops/strategy/pricing-tiers.md
Normal file
253
ops/strategy/pricing-tiers.md
Normal file
@ -0,0 +1,253 @@
|
||||
# ReBreak Pricing-Tiers: Strategie, Stress-Test, Downgrade-Policy
|
||||
|
||||
> Single-Source-of-Truth für tier-gated Features bleibt `backend/server/utils/plan-features.ts` (Code) bzw. die Pricing-Page auf rebreak.org (Preise). Dieses Doc ist die *Strategie-Schicht* darüber.
|
||||
>
|
||||
> **Preis-Caveat:** rebreak.org/pricing war beim Schreiben nicht erreichbar (HTTP 401). Alle Preise unten (`Pro 3.99€`, `Legend 7.99€`, `+3€ MDM`) sind aus `ops/RELEASE_READINESS.md` + `ops/strategy/mdm-productization-roadmap.md` übernommen und als **Annahme** markiert. Sobald die Pricing-Page live ist, gilt die — dieses Doc nachziehen.
|
||||
>
|
||||
> Autor: rebreak-strategist · Stand: 2026-05-11
|
||||
|
||||
---
|
||||
|
||||
## 0. TL;DR für Eilige
|
||||
|
||||
- **Tier-Logik ist grundsätzlich tragfähig**, aber **Free ist zu großzügig** und **Pro hat ein Wertproblem**: free→pro für 4€ verkauft aktuell hauptsächlich "schnellere Stimme + 200 statt 5 Domains" — das ist kein Schmerzpunkt für jemanden in Recovery.
|
||||
- **Legend ist der einzige Tier mit echtem, schwer-kopierbarem USP**: Multi-Device-DNS-Schutz (Mac/Windows fremde Geräte). Das ist die Conversion-Story. Haiku-Coach + ElevenLabs + Mail-Live sind "nice", aber allein keine 8€ wert.
|
||||
- **Empfehlung Pricing-Architektur:** Free bewusst *schmaler* schneiden (Domains 5→bleibt, aber Global-Blocklist als Pro-Gate ist okay; Mail-Cron 4h ist okay), **Pro repositionieren als "ernsthafter Schutz" (Live-Mail rein, Multi-Device 1 Gerät rein)**, Legend = "alles + bis 3 fremde Geräte + Premium-Coach". Mehr in §2.5.
|
||||
- **Downgrade-Policy:** *Niemals* sicherheitsrelevante Features bei Downgrade still abschalten. Grundprinzip: **Recovery-Schutz bleibt aktiv, Komfort wird limitiert.** Detail-Matrix in §3.
|
||||
- **DiGA/Ethik:** Paywalling von *Coaching* und *Komfort* ist okay. Paywalling von *Blockade-Reichweite* (Multi-Device) ist vertretbar, aber kommunikativ heikel — Sprachregelung in §2.4. Das eine Feature, das man **nie** hinter Paywall stellen sollte: den Kern-Blocker auf dem Hauptgerät + SOS-Coach in irgendeiner Form. Beides ist heute korrekt free.
|
||||
|
||||
---
|
||||
|
||||
## 1. Tier-Feature-Tabelle (Strategie-Sicht, abgeglichen mit `PLAN_LIMITS`, Stand 2026-05-11)
|
||||
|
||||
Spalten = Ist-Zustand Code. Empfohlene Änderungen stehen in §2.5, nicht hier.
|
||||
|
||||
| Achse | free | pro | legend |
|
||||
|---|---|---|---|
|
||||
| **Preis (Annahme, web-only via rebreak.org)** | 0 € | ~3,99 €/mo | ~7,99 €/mo |
|
||||
| **MDM-Lock Add-On (geplant, Phase G)** | — | +3 € → ~6,99 € | +3 € → ~10,99 € |
|
||||
| **Kern-DNS-Blocker (Hauptgerät, HaGeZi-/ReBreak-Liste)** | ✅ | ✅ | ✅ |
|
||||
| **Globale HaGeZi-Blocklist (208k+ Offshore-Domains)** | ❌ (`globalBlocklist:false`) | ✅ | ✅ |
|
||||
| **Custom-Blocklist-Domains (eigene)** | 5 | 5 | 10 |
|
||||
| **Domain-Slot-Refill** | ❌ | ✅ | ✅ |
|
||||
| **Domain direkt zur ReBreak-Community-Blocklist beitragen** | ❌ | ❌ | ✅ (`canAddToBlocklist`) |
|
||||
| **Multi-Device-DNS-Profile (fremde Mac/Windows-Geräte)** | ❌ | ❌ | ✅ bis 3 (`maxDevices:3`) |
|
||||
| **Account-Devices parallel (Anti-Sharing-Limit)** | 1 | 1 | 3 |
|
||||
| **SOS-Coach LLM** | Groq Llama 3.1 8B | Groq Llama 3.3 70B | Claude 3.5 Haiku (via OpenRouter) |
|
||||
| **SOS-Coach Fallback-Kette** | 70B → gemma2 → OR-Llama | 8B → OR-70B | Claude-3-Haiku → Llama-70B |
|
||||
| **SOS-TTS-Provider** | Google Neural2 | Cartesia Sonic-2 (~75ms) | ElevenLabs Turbo v2.5 |
|
||||
| **TTS-Tagesquota** | 60 s/Tag | 300 s/Tag | unbegrenzt |
|
||||
| **Lyra-Voice-Picker (Stimme wählbar)** | ❌ | ❌ | ✅ |
|
||||
| **Mail-Agent (Casino-Newsletter-Scan)** | 1 Account | 3 Accounts | unbegrenzt |
|
||||
| **Mail-Scan-Intervall** | nur 4h-Cron | 1h / 4h / 8h | 1h / 4h / 8h (+ Live-IDLE geplant) |
|
||||
| **Community: posten** | ✅ | ✅ | ✅ |
|
||||
| **Community: Gruppe gründen** | ❌ | ❌ | ✅ (`canCreateGroup`) |
|
||||
| **Streak / Urge-Log / Profil / Demographics** | ✅ | ✅ | ✅ |
|
||||
| **Standalone-Games (Solo)** | ✅ | ✅ | ✅ |
|
||||
| **Games 1vs1-Mode (geplant)** | ❌ | ✅ (geplant) | ✅ (geplant) |
|
||||
| **Demographics-Reward** | 1 Woche Pro-Trial fürs vollständige Ausfüllen | — | — |
|
||||
|
||||
**Code-Inkonsistenzen (Tech-Tickets, nicht Strategie):**
|
||||
1. **Legend `mailIntervalOptions` listet kein Live-IDLE** — Memory sagt "legend = Live-Scan", Code hat nur `[1,4,8]`. → klären, nichts bewerben was nicht im Code ist.
|
||||
2. **`maxDevices` (App-Login-Geräte) vs. Multi-Device-DNS-Profile** heißen beide "Devices" → User-Verwirrung. Naming: "Geräte mit ReBreak-App" vs. "geschützte Computer".
|
||||
3. **Pro `customDomains:5` == Free `customDomains:5`** — Pro bekommt nur `domainRefill:true` zusätzlich → schwacher Unterschied (siehe §2.2).
|
||||
|
||||
---
|
||||
|
||||
## 2. Strategie-Begründung + ehrlicher Stress-Test
|
||||
|
||||
### 2.1 Reicht Free zum "Anfixen" — oder verschenkt es zu viel?
|
||||
Free hat: Kern-Blocker (Hauptgerät), SOS-Coach (echtes LLM), Mail-Scan (1 Account, 4h), 5 eigene Domains, voller Streak/Urge/Community/Games-Stack, Profil.
|
||||
- **Kern-Blocker MUSS free sein** — nicht verhandelbar. Niemand im akuten Rückfallrisiko darf an einer Paywall scheitern. DiGA-/PR-mäßig die einzig haltbare Position. ✅
|
||||
- **SOS-Coach free ist richtig** — der Craving-Moment ist *der* Hochrisikomoment. Free = Groq Llama 8B (Groq quasi gratis, gut genug). ✅
|
||||
- **Mail-Scan 1 Account / 4h free: grenzwertig großzügig, aber okay** — günstig (kein IDLE-Halten), liefert "es funktioniert"-Erlebnis. ✅
|
||||
- **5 Custom-Domains free: zu großzügig in *Kombination*** — 5 reicht den meisten für ihre Trigger-Seiten. Wer 5 hat ohne globale HaGeZi-Liste, hat löchrigen Schutz → das ist eigentlich *der* natürliche Pro-Trigger. Aber Free fühlt sich mit Blocker+Coach+Mail+Community "fertig" an. Gesamt-Großzügigkeits-Problem, kein Domain-Problem.
|
||||
- **Verdict:** Free ist nicht *gefährlich* großzügig (nichts Sicherheitskritisches fehlt jemandem) — aber *kommerziell* zu großzügig, weil der Pro-Sprung kein klares "das brauche ich" hat. Lösung: Pro aufwerten, nicht Free beschneiden.
|
||||
|
||||
### 2.2 Lohnt free → pro für ~4 €?
|
||||
Pro gibt zusätzlich: globale HaGeZi-Liste, Domain-Refill, 70B-Coach statt 8B, Cartesia statt Google TTS + 5min statt 1min/Tag, 3 statt 1 Mail-Account, Mail-Intervall wählbar.
|
||||
**Honest take: zu dünn für eine Recovery-App.** Der 70B- vs. 8B-Coach ist für 90% nicht erlebbar (Engineering-Metrik, kein User-Bedürfnis). Cartesia-Stimme = Komfort, kein Schmerzpunkt. **Globale HaGeZi-Liste ist das einzige Pro-Feature mit echter Substanz** — geht aber neben drei "Premium-Geschmäckle"-Features unter. 3 statt 1 Mail-Account = Nische. Domain-Refill = Nische.
|
||||
**Empfehlung:** Pro braucht *einen* harten, sicherheitsrelevanten Anker → Kandidaten: (a) globale HaGeZi-Liste *lauter kommunizieren* ("Free schützt vor 5 Seiten deiner Wahl. Pro schützt vor 208.000 bekannten Glücksspiel-Domains."), (b) **1 fremdes Gerät schützen nach Pro ziehen** (radikaler, siehe §2.5), (c) Live-Mail-Scan nach Pro *falls gebaut*. Pflicht: (a). Empfohlen zusätzlich: (b).
|
||||
**Verdict:** Pro ist heute "Free mit besserer Stimme". Das verkauft sich nicht. Pro muss "der ernsthafte Schutz" werden.
|
||||
|
||||
### 2.3 Lohnt pro → legend für nochmal ~4 €? Ist Multi-Device der Killer?
|
||||
**Ja — Multi-Device-DNS-Schutz ist der einzige echte Legend-USP, und er ist gut.** Sucht arbeitet gegen Lücken (iPhone gesperrt → alter Windows-Laptop). ReBreak hat dafür eine Antwort, die OASIS strukturell nicht hat (DNS-Layer = auch Offshore, jedes Gerät). Verteidigbar, kopier-schwer, Bedarf entsteht organisch. **Haiku-Coach, ElevenLabs, Mail-Live, Gruppe-gründen, 10 statt 5 Domains** = "nett", aber *garnieren* das Multi-Device-Angebot, rechtfertigen den Legend-Preis nicht allein.
|
||||
**Risiko:** Wenn Multi-Device technisch noch nicht rund ist (`.mobileconfig`-Generierung pro User, Windows-Pfad, Onboarding-UX — Phase G ist "~1-2 Wochen dev", noch nicht entschieden; `protectedDevices.ts` Endpoints teils noch nicht fertig), hat Legend *aktuell* keinen tragfähigen USP. **Push back: Legend nicht zu 8€ bewerben, solange Multi-Device nicht End-to-End läuft.** Bis dahin: Legend ~5,99€ oder Multi-Device als "Early Access" labeln.
|
||||
**Verdict:** Multi-Device IST der Killer — *wenn er fertig ist*. Legend-Pricing an Multi-Device festmachen, nicht am Coach/Voice-Kram.
|
||||
|
||||
### 2.4 DiGA-/Ethik-/PR-Check: Darf man Recovery-Features paywallen?
|
||||
|
||||
| Feature-Klasse | Paywall okay? | Begründung |
|
||||
|---|---|---|
|
||||
| Kern-Blocker Hauptgerät | **Nein, niemals.** | Lebensader. Free. (Ist es.) |
|
||||
| SOS-Coach (irgendeine Form) | **Nein.** | Craving-Moment = Hochrisikomoment. Free braucht *einen* funktionierenden Coach. (Hat es: Groq 8B.) |
|
||||
| Bessere Coach-Qualität (70B/Haiku) | **Ja, okay.** | Kein User stirbt an 8B statt 70B. Qualitäts-Upgrade legitim. |
|
||||
| Globale HaGeZi-Blocklist | **Grenzwertig, aber vertretbar.** | Pflege/Hosting kostet, Free hat *einen* Schutz (5 eigene). Aber 5 vs. echte Offshore-Landschaft = Free hat löchrigen Schutz. → behalten als Pro-Gate, ABER ehrlich kommunizieren, keine Angstmache. Falls DiGA: dann gibt's eben einen "alles drin, Kasse zahlt"-SKU (separat). |
|
||||
| Mail-Schutz (Cron vs. Live) | **Ja, gestaffelt okay.** | Free = 4h-Cron auf 1 Account = echter Schutz, nur nicht instant. Live als Upgrade legitim. |
|
||||
| **Multi-Device-DNS-Schutz** | **Ja, vertretbar — mit Sorgfalt.** | Kostet echte Infra pro Gerät; Free/Pro haben *Hauptgerät* geschützt; wer mehrere Geräte hat, ist tendenziell weiter im Prozess. **Sprachregelung:** nie "Schutz kostet" — immer "ReBreak auf deinem Computer einrichten — Teil von Legend". Frame als *Reviererweiterung*, nicht als Sicherheits-Gating. Akute-Krise-Hardship-Comp: 3 Monate Legend gratis. PR-Gold, billig. |
|
||||
| Community posten / Gruppe gründen | Free okay / Gruppe = Legend okay (Moderations-Last). | Unkritisch. |
|
||||
| Premium-Voice / Voice-Picker | **Ja, klar okay.** | Reine Kosmetik. |
|
||||
|
||||
**PR-Bottom-Line:** Solange (a) Kern-Blocker + ein Coach immer free sind, (b) nie mit Angst/Dringlichkeit verkauft wird, (c) kulante Hardship-Comp-Policy → ist die Tier-Struktur PR-verteidigbar. Eine Recovery-App, die *gar nicht* monetarisiert, geht ein und hilft dann niemandem. Außenkommunikation: "Free hilft. Pro/Legend finanzieren, dass Free weiter existiert und besser wird."
|
||||
**DiGA-Spezialfall:** Wenn der DiGA-Pfad konkret wird → vermutlich ein *vierter* SKU "ReBreak DiGA" (Kasse zahlt, ~200€/Quartal). Was da drin sein muss → BfArM-Verfahren + Wirksamkeitsstudie, nicht diese Page. **DiGA-SKU jetzt nicht mitdesignen** — aber nichts in Free/Pro/Legend tun, das einer späteren "alles drin"-Variante im Weg steht.
|
||||
|
||||
### 2.5 Empfehlung: konkretes Re-Slicing (optional, aber begründet)
|
||||
|
||||
| Achse | free (Vorschlag) | pro (Vorschlag) | legend (Vorschlag) |
|
||||
|---|---|---|---|
|
||||
| Kern-Blocker Hauptgerät | ✅ | ✅ | ✅ |
|
||||
| Globale HaGeZi-Liste | ❌ → **als DAS Pro-Argument framen** | ✅ | ✅ |
|
||||
| Custom-Domains | 5 | **15–25** (echter Unterschied) | unbegrenzt |
|
||||
| Domain-Refill | ❌ | ✅ | ✅ |
|
||||
| **1 fremdes Gerät schützen** | ❌ | **✅ (1 Gerät)** ← *neuer Pro-Anker* | ✅ (bis 3) |
|
||||
| Mail-Accounts | 1 | 3 | unbegrenzt |
|
||||
| Mail-Live-Scan *(falls gebaut)* | ❌ | ✅ | ✅ |
|
||||
| Coach-LLM | Groq 8B | Groq 70B | Haiku 4.5 |
|
||||
| TTS | Google 60s | Cartesia 300s | ElevenLabs unbegrenzt + Voice-Picker |
|
||||
| Gruppe gründen | ❌ | ❌ | ✅ |
|
||||
| Community-Blocklist beitragen | ❌ | ❌ | ✅ |
|
||||
| Preis | 0 € | ~3,99–4,99 € | ~7,99–9,99 € |
|
||||
|
||||
**Der entscheidende Move:** "1 fremdes Gerät" von Legend nach Pro ziehen → Pro hat plötzlich eine Substanz-Story, Legend bleibt differenziert ("schütz *alle* Geräte + Premium-Coach"). Kosten: 1 zusätzliches DNS-Profil pro Pro-User ≈ 0€ marginal. Falls ihr das NICHT macht: dann muss Pro zumindest die globale HaGeZi-Liste als Headline haben und Pro-Marketing muss aufhören, mit "schnellere Stimme" zu führen.
|
||||
|
||||
### 2.6 Natürliche Upgrade-Trigger-Momente (für In-App-Prompts)
|
||||
**Regel: nie im SOS-/Craving-Flow upsellen. Nie Countdown/Knappheit. Nur kontextuell, faktisch.**
|
||||
|
||||
| Trigger | Sprung | Ton-Beispiel |
|
||||
|---|---|---|
|
||||
| User trägt seine 5. Custom-Domain ein | free→pro | "Das war deine letzte freie Domain. Pro kennt 208.000 bekannte Glücksspiel-Seiten." |
|
||||
| 2. Mail-Account hinzufügen | free→pro | "Free schützt eine Mailadresse. Pro schützt bis zu drei." |
|
||||
| Mail-Intervall-Picker (<4h) | free→pro | "Schnellere Scans gibt's ab Pro." |
|
||||
| Lyra-Voice-Settings öffnen | pro→legend | "Lyras Stimme wählen — Teil von Legend." |
|
||||
| "Computer schützen" / "Gerät hinzufügen" | →legend (oder →pro im Re-Slice) | "ReBreak auf deinem Mac/Windows einrichten — gehört zu Legend." |
|
||||
| Community-Gruppe gründen | →legend | "Eigene Gruppen gründen geht ab Legend." |
|
||||
| Demographics ausgefüllt | (kein Sprung — Reward) | "Danke. Du hast 7 Tage Pro freigeschaltet." |
|
||||
| Pro-Trial läuft ab | →pro | "Deine 7 Pro-Tage sind vorbei. Dein Schutz läuft normal weiter — Pro war's, was du extra hattest: [Liste]." |
|
||||
|
||||
---
|
||||
|
||||
## 3. Downgrade-Policy pro tier-limitierter Ressource
|
||||
|
||||
**Leitprinzipien (für alle Ressourcen):**
|
||||
1. **Recovery-Schutz wird bei Downgrade nie still abgeschaltet** — muss etwas deaktiviert werden, wird's *vor* dem Downgrade im Briefing-Screen (§4) gezeigt + nachher in persistenter Notification gelistet.
|
||||
2. **Komfort wird limitiert, Sicherheit wird grandfathered wo kostenmäßig vertretbar** — Marginalkosten sind fast überall ≈0 (Groq gratis, DNS trivial, 1 DB-Row); einziger echter Kostentreiber: ElevenLabs-TTS + IMAP-IDLE-Connections.
|
||||
3. **Im Zweifel: Grace-Period statt harter Block.**
|
||||
4. **Bei Reaktivierung (re-upgrade) schaltet sich alles Deaktivierte automatisch wieder ein** — deaktiviert ≠ gelöscht, keine Re-Konfiguration nötig.
|
||||
|
||||
| Ressource | Downgrade-Szenario | Empfohlene Policy | Begründung |
|
||||
|---|---|---|---|
|
||||
| **Custom-Blocklist-Domains** (z.B. legend 10 → 5, User hat 8) | über Limit | **Grandfathered: alle behalten & aktiv, kein Neues hinzufügen bis unter Limit.** Niemals Auto-Delete. | Aktiver, vom User selbst gesetzter Schutz. Marginalkosten 0. Bei "Domain hinzufügen": "8/5 — entferne erst eine". |
|
||||
| **Globale HaGeZi-Blocklist** (→ free) | Feature entfällt | **Grace 14 Tage, dann deaktiviert** + sichtbarer Hinweis ("Schutz vor 208.000 Seiten endet in X Tagen. Deine 5 eigenen bleiben."). | Größter Schutz-Verlust beim Downgrade — Grace gibt Zeit, Trigger-Domains in die 5 Free-Slots zu übernehmen. Ehrlich, unaufdringlich. Re-upgrade → sofort wieder aktiv. |
|
||||
| **Mail-Accounts** (legend ∞ → pro 3 → free 1; User hat 5) | über Limit | **Grandfathered, dann nach 30 Tagen ohne re-upgrade die überzähligen N *pausieren* (älteste behalten, zuletzt hinzugefügte pausieren). Niemals löschen.** + Spezialfall ↓ | Mail-Scan = echter Schutz, aber IMAP-IDLE kostet Server-Ressourcen → pausieren statt forever-grandfathern. **Spezialfall:** wenn ein bald-pausierter Account gerade einen ungescannten Casino-Newsletter in der Inbox hat → erst ein "final sweep"-Scan + Block, *dann* pausieren. Recovery-Sicherheit > saubere Limit-Durchsetzung. |
|
||||
| **Multi-Device-DNS-Profile** (legend → pro/free; User hat 2 enrolled) | Feature entfällt | **Sonderfall, ausführlich ↓.** Kurz: nach 14-Tage-Grace → DoH liefert für betroffene Token nur noch Passthrough/Minimal-Liste, Profil-Status `degraded` (nicht `revoked`), In-App klar: "Schutz ausgelaufen — Profil auf [Gerät] selbst entfernen: [Link]". **Kein** grünes "geschützt"-Häkchen. | `.mobileconfig` auf nicht-supervised-Gerät ist *nicht* remote-removable. Wer nicht zahlt, soll's nicht *dauerhaft* behalten (sonst kauft niemand Legend) — aber falsche Sicherheit ("geschützt" auf einem Gerät, das nur Passthrough macht) ist in Recovery gefährlicher als ehrliche Klarheit. |
|
||||
| **Account-Login-Devices** (`maxDevices`: legend 3 → 1; User auf 3 Geräten) | über Limit | **Grace 7 Tage, dann beim nächsten App-Start auf einem überzähligen Gerät → sanfter Logout mit Erklärung. Zuletzt aktives Gerät behält Session. Nie das gerade benutzte rauswerfen.** | Anti-Account-Sharing, kein Schutz-Feature → darf härter sein. "Dein Plan erlaubt 1 Gerät. [iPad] wird abgemeldet, auf [iPhone] bleibst du angemeldet." **Logout ≠ Schutz aus** — der DNS-Filter auf dem abgemeldeten Gerät läuft weiter. Klarstellen. |
|
||||
| **Coach-LLM-Qualität** (Haiku → 70B → 8B) | schwächeres Modell | **Sofort, kein Grace, aber dezent ankündigen** ("Dein Coach läuft ab jetzt auf [Modell] — er ist weiter da, immer."). Nicht dramatisieren. | Kein Sicherheitsverlust (Coach voll funktional, nur weniger nuanciert). |
|
||||
| **TTS-Provider + -Quota** (ElevenLabs ∞ → Cartesia 300s → Google 60s) | Downgrade | **Sofort.** Provider wechselt, Quota greift ab nächstem Tag — laufende TTS-Session nicht mid-sentence killen. Custom-Voice-Auswahl merken (nicht löschen), re-upgrade → wieder aktiv. | ElevenLabs = einziger echter Kostentreiber → hier *muss* hart limitiert werden. Aber: TTS = Komfort, kein Schutz → kein Drama, kein Grace. |
|
||||
| **Lyra-Voice-Picker** | Feature entfällt | Gewählte Stimme gespeichert lassen, inaktiv; Default aktiv. Re-upgrade → zurück. Kein Hinweis nötig. | Reine Kosmetik, 0 Kosten. |
|
||||
| **Community: eigene Gruppe** (User hat eine gegründet) | Feature entfällt | **Grandfathered: Gruppe bleibt, User bleibt Admin/Owner, kann moderieren — kann keine neue gründen.** | Eine Gruppe schließen, weil der Gründer downgradet, bestraft *andere* User. Inakzeptabel. Verwaiste Gruppe (Owner downgradet + inaktiv >90d) → separater Cleanup-Pfad, kein Downgrade-Thema. |
|
||||
| **Domain-Slot-Refill** (`domainRefill:true` → `false`) | Feature entfällt | Sofort, lautlos. Bereits-aufgefüllte Slots bleiben; künftige füllen nicht nach. | Nische, kein Schutzverlust. |
|
||||
| **Games 1vs1** (geplant) | Feature entfällt | Sofort. Laufende Partie zu Ende, danach Mode nicht startbar. | Reine Unterhaltung. |
|
||||
| **Demographics-Pro-Trial** (7 Tage, läuft *immer* aus) | Trial-Ende = de-facto pro→free | **Wie normaler pro→free-Downgrade, aber besonders sanftes Briefing** (§4): "Danke nochmal. Deine 7 Pro-Tage sind vorbei — dein Schutz läuft normal weiter, das hier war diese Woche extra: [Liste]. Wenn du Pro behalten willst: [Link]." Nie schuldzuweisend. | Sonst "die haben mich angefüttert"-Gefühl → Marken-Schaden + DSGVO-Optik. Hans-Müller-DSB-Review (pending) sollte explizit auch den *Trial-Ablauf-Flow* abdecken. |
|
||||
| **MDM-Lock Add-On** (geplant; +3€ → User kündigt Add-On, behält Pro/Legend) | Add-On weg | **Wie Multi-Device-DNS, aber: das MDM-Restriction-Profil *kann* remote entfernt werden (NanoMDM-Push). 14-Tage-Grace, dann `RemoveProfile` für das Restriction-Payload (DNS-Payload bleibt = Basis-Schutz). + 7-Tage-Cooldown vor Lock-Entfernung** (symmetrisch zum Enrollment-Cooldown — Lyra: "drüber schlafen"). | ReBreak hat technisch Kontrolle (supervised). Ethisch heikel in die *andere* Richtung: ein User, der das Lock loswerden will, ist evtl. im Rückfall-Modus → Cooldown. Liability-Pfad via Lyra + Admin-Override. |
|
||||
|
||||
### Spezialfall ausführlich: Multi-Device `.mobileconfig` ist nicht remote-removable
|
||||
1. **Faktum:** Ein DNS-`.mobileconfig` auf einem *nicht-supervised* Mac wird manuell installiert, zeigt statisch auf `dns.rebreak.org/dns-query`, kein Push-Channel zum Löschen. *(Vom Backend/MDM-Owner bestätigen lassen, ob der Multi-Device-Pfad = der MDM-Add-On-Pfad (supervised) oder ein separater nicht-supervised-Pfad ist.)*
|
||||
2. **Was wir kontrollieren:** *Was* `dns.rebreak.org` für die Anfragen eines Geräte-Tokens zurückgibt — variabel pro Token.
|
||||
3. **Policy:**
|
||||
- **Tag 0–14:** Profil voll funktional (volle Blocklist). App zeigt Karte "Geräteschutz für [Label] läuft am [Datum] aus." — neutral, mit "Schutz behalten"-Link (re-upgrade) + "Profil selbst entfernen"-Anleitung.
|
||||
- **Ab Tag 15:** Server liefert für dieses Token **keine ReBreak-Blocklist mehr** → **Passthrough auf normalen Upstream-Resolver** (nicht `REFUSED`/`SERVFAIL` — das macht das Gerät potenziell internet-los, "ReBreak hat meinen Rechner kaputtgemacht", Stress → Rückfall-Trigger). Minimaler Logging-Footprint, klare Privacy-Notice.
|
||||
- **In-App:** Profil-Status `degraded` (nicht `revoked` — "revoked" suggeriert "weg"). Karte: "[Label]: Schutz ausgelaufen. Profil noch auf dem Gerät — entferne es unter [OS-Pfad], oder hol dir Legend zurück." **Kein** grünes Häkchen, **kein** "geschützt".
|
||||
- **Re-upgrade:** Token wieder volle Blocklist, Status `active`, keine Neu-Installation.
|
||||
4. **Warum nicht "lassen wir's an, kostet ja nix":** dann wird Legend-Multi-Device unverkäuflich (einmal zahlen → für immer behalten). ≈0€ Marginalkosten ist kein Argument, das Hauptverkaufsargument zu verschenken.
|
||||
5. **Warum nicht `REFUSED`:** Arbeitsrechner plötzlich ohne Internet = Stress = Rückfall-Trigger. Sanfter Passthrough + ehrlicher In-App-Hinweis = recovery-sicherer Weg.
|
||||
|
||||
---
|
||||
|
||||
## 4. Plan-Wechsel-Briefing-Screen — Inhalt (Text/Struktur, kein Code)
|
||||
|
||||
**Tonalität (beide Screens):** Du-Form, ruhig, faktisch. Keine Ausrufezeichen-Wände, keine Countdowns/Knappheit. **Beim Downgrade: keine Schuld, keine Manipulation, keine "bist du sicher? du verlierst SO viel!!"-Dramatik.** Immer **zuerst sagen, was *bleibt*** ("dein Schutz läuft weiter"), dann was sich ändert. Wort "verlieren" sparsam — lieber "wird limitiert auf", "pausiert", "ändert sich zu".
|
||||
|
||||
### 4a. Upgrade-Briefing
|
||||
1. **Header:** "Du wechselst auf Legend." (bzw. Pro)
|
||||
2. **Was dazukommt** — Liste mit Häkchen, konkret: "Schutz für bis zu 3 weitere Geräte (Mac/Windows)", "Coach läuft auf Claude — feinfühligere Gespräche", "Lyra-Stimme nach Wahl, unbegrenzte Sprachausgabe", "Echtzeit-Schutz für Mail-Postfächer" *(nur wenn gebaut)*, "Eigene Community-Gruppen", "Bis zu [N] eigene blockierte Seiten".
|
||||
3. **Was gleich bleibt:** "Dein Streak, deine Logs, dein Coach, dein bisheriger Schutz — alles bleibt. Du kriegst nur mehr dazu."
|
||||
4. **Preis-/Abrechnungshinweis:** "[X]€/Monat, abgerechnet über rebreak.org. Du kannst jederzeit zurückwechseln." (Apple 4.8: dieser Screen darf *informieren*, aber kein Kauf-Button, der aus der App zur Web-Bezahlseite führt. Mit Release-Engineer klären — sicherer: nur "verwalte dein Abo auf rebreak.org"-Hinweis-Text.)
|
||||
5. **CTA:** "Los geht's" / Bestätigen. **Nicht:** "du sparst X%"-Banner, keine rot-durchgestrichene-Free-Vergleichstabelle. Recovery-App, kein SaaS-Funnel.
|
||||
|
||||
### 4b. Downgrade-Briefing
|
||||
1. **Header:** "Du wechselst von [Legend] auf [Pro]." — neutral.
|
||||
2. **Zuerst die Beruhigung:** "Dein Grundschutz läuft weiter. Dein Streak, deine Logs, dein Coach, deine Community — bleiben." (Immer als erstes, prominent.)
|
||||
3. **Was sich ändert** — ehrliche Liste, pro betroffener Ressource eine Zeile mit *konkreter Zahl + Mechanik*: z.B. "Globale Glücksspiel-Blocklist (208.000 Seiten): läuft noch 14 Tage, danach bleiben deine 5 eigenen Domains. → Tipp: trag jetzt deine wichtigsten ein, solange Platz ist." / "Geschützte Geräte: du hast 2 ([MacBook], [PC]). [Plan] deckt [N]. [MacBook] bleibt, [PC] läuft am [Datum] aus — danach Profil auf [PC] selbst entfernen: [Link]." / "Mailpostfächer: 5 verbunden, [Plan] schützt [N]. Die [3] zuletzt hinzugefügten werden pausiert (nicht gelöscht). Letzter Scan läuft noch durch." / "Eigene blockierte Seiten: [8], [Plan] deckt [5]. Alle bleiben aktiv — keine neue hinzufügen bis unter [5]." / "Coach: läuft ab jetzt auf [Llama 70B] statt [Claude]. Er ist weiter da — immer." / "Sprachausgabe: andere Stimme, [N] Min/Tag statt unbegrenzt. Deine gewählte Stimme merken wir uns." / "Eingeloggte Geräte: [Plan] erlaubt [1]. In 7 Tagen meldet sich [Liste] ab — auf [aktivem Gerät] bleibst du angemeldet. Der Filter auf den abgemeldeten Geräten läuft weiter." / "Deine Community-Gruppe [Name] bleibt — du bleibst Admin. Neue Gruppen gründen geht ab Legend."
|
||||
4. **Was *nicht* passiert:** "Es wird nichts gelöscht. Alles Pausierte kommt sofort zurück, wenn du wieder upgradest — du musst nichts neu einrichten."
|
||||
5. **Recovery-Sicherheitssatz (immer):** "Wenn dieser Wechsel deinen Schutz in einem Moment schwächt, in dem du dir unsicher bist — schreib Lyra. Oder schreib uns. Wir finden eine Lösung." (Hardship-Comp-Hook — gehört *sichtbar* hier rein.)
|
||||
6. **CTA-Reihe:** primär "Verstanden, weiter" — sekundär, *kleiner*, "Doch bei [Legend] bleiben". **Kein** "BIST DU WIRKLICH SICHER???"-Zwischendialog.
|
||||
7. **Nach dem Wechsel:** persistente (wegklickbare) In-App-Karte mit den "läuft aus am [Datum]"-Punkten, bis abgelaufen/erledigt.
|
||||
|
||||
---
|
||||
|
||||
## 5. Szenario-Test-Matrix (für den Tier-Toggle-Build)
|
||||
|
||||
### 5a. Statische Tier-Erwartungs-Matrix — "Was *soll* der User pro Tier sehen/können" (Soll = aktueller Code-Stand, nicht das Re-Slicing)
|
||||
|
||||
| # | Feature / Achse | free — Soll | pro — Soll | legend — Soll |
|
||||
|---|---|---|---|---|
|
||||
| T1 | Kern-DNS-Blocker Hauptgerät | aktiv | aktiv | aktiv |
|
||||
| T2 | Globale HaGeZi-Liste | **nicht** aktiv; Pro-Hinweis | aktiv | aktiv |
|
||||
| T3 | Custom-Domain hinzufügen | bis 5, dann Block + Pro-Hinweis | bis 5, dann Hinweis | bis 10, dann Hinweis |
|
||||
| T4 | Domain-Slot-Refill | nein | ja | ja |
|
||||
| T5 | "Zur ReBreak-Liste beitragen"-Button | nicht sichtbar/disabled | nicht sichtbar/disabled | sichtbar + funktioniert |
|
||||
| T6 | "Computer schützen" / Multi-Device-Screen | gated → Legend-Hinweis | gated → Legend-Hinweis | erreichbar; enroll bis 3, dann Limit-Hinweis |
|
||||
| T7 | Account-Login-Devices | 2. Gerät → alter verdrängt/blockiert | dito (1) | bis 3 parallel, 4. → ältester raus |
|
||||
| T8 | SOS-Coach LLM | Groq Llama 8B | Groq Llama 70B | Claude 3.5 Haiku |
|
||||
| T9 | SOS-TTS-Stimme | Google Neural2 | Cartesia Sonic-2 | ElevenLabs Turbo |
|
||||
| T10 | TTS-Tagesquota | nach 60s/Tag kein TTS (Text bleibt) | nach 300s/Tag | nie erschöpft |
|
||||
| T11 | Lyra-Voice-Picker | nicht sichtbar/Legend-Hinweis | nicht sichtbar/Legend-Hinweis | sichtbar, Auswahl wirkt |
|
||||
| T12 | Mail-Account hinzufügen | bis 1, dann Block + Pro-Hinweis | bis 3, dann Hinweis | unbegrenzt |
|
||||
| T13 | Mail-Scan-Intervall-Picker | nur 4h | 1h/4h/8h | 1h/4h/8h (+Live falls gebaut — sonst Doc/Code-Mismatch dokumentieren) |
|
||||
| T14 | Community: Post erstellen | erlaubt | erlaubt | erlaubt |
|
||||
| T15 | Community: Gruppe gründen | gated → Legend-Hinweis | gated → Legend-Hinweis | erlaubt |
|
||||
| T16 | Streak/Urge-Log/Profil/Demographics | voll nutzbar | voll nutzbar | voll nutzbar |
|
||||
| T17 | Standalone-Games (Solo) | spielbar | spielbar | spielbar |
|
||||
| T18 | Games 1vs1 (falls gebaut) | gated | erlaubt | erlaubt |
|
||||
| T19 | Demographics ausfüllen → Pro-Trial | nach vollständig: 7 Tage Pro aktiv, Banner | (n/a) | (n/a) |
|
||||
| T20 | Upgrade-/Downgrade-Briefing-Screen | erscheint bei jedem Toggle, Inhalt = §4 | dito | dito |
|
||||
|
||||
**Architektur-Konsistenz-Checks:**
|
||||
- **C1:** Toggle wirkt *sofort* auf alle gated UIs (kein App-Neustart)? → dokumentieren, sonst False-Negatives.
|
||||
- **C2 (wichtigster):** Backend respektiert den Toggle, nicht nur das Frontend? Coach-Modell / TTS-Provider / Mail-Limit werden serverseitig in `getPlanLimits` entschieden → der Test-Toggle muss den *Server*-Plan ändern, nicht nur einen Client-Flag. Sonst testet man UI-Theater. *(Erfüllt: `/api/dev/set-plan` setzt `profile.plan` in der DB.)*
|
||||
- **C3:** Legacy-Plan-Namen (`"premium"`→legend, `"standard"`→pro) — falls Test-User mit alten Werten existieren, mappen die korrekt?
|
||||
|
||||
### 5b. Downgrade-Szenarien als durchspielbare Test-Cases
|
||||
|
||||
| # | Startzustand | Aktion | Erwartetes Verhalten |
|
||||
|---|---|---|---|
|
||||
| D1 | legend, 8 Custom-Domains | → pro | alle 8 bleiben aktiv & blocken. "hinzufügen" → "8/5 — entferne erst eine". Nichts gelöscht. Briefing listet's. |
|
||||
| D2 | legend, 8 Custom-Domains | → free | wie D1 + HaGeZi-Karte "läuft in 14 Tagen aus". Nach 14d: globale Liste inaktiv, 8 eigene bleiben. |
|
||||
| D3 | pro, globale Liste aktiv | → free | Briefing nennt 14-Tage-Grace. Tag 0–13: HaGeZi blockt weiter. Tag 14: inaktiv. Re-upgrade → sofort aktiv. |
|
||||
| D4 | legend, 5 Mail-Accounts | → pro | 3 bleiben aktiv (3 zuerst hinzugefügte), 2 *pausiert* (nicht gelöscht). Vor Pause: "final sweep"-Scan. Re-upgrade → reaktiviert automatisch. |
|
||||
| D5 | legend, 5 Mail-Accounts, **einer hat ungescannt einen Casino-Newsletter in der Inbox** | → free | betroffener Account wird **nicht sofort** pausiert: erst Scan + Block, *dann* Pause. (Falls Code das nicht so macht → P1-Bug.) |
|
||||
| D6 | legend, 2 fremde Geräte enrolled | → pro/free | DB: beide → `degraded` nach 14-Tage-Grace. Tag 0–13: volle Blocklist. Tag 14: DoH-Passthrough. App: "Schutz ausgelaufen — Profil selbst entfernen: [Link]". Kein grünes Häkchen. Re-upgrade → volle Liste, `active`, keine Neu-Installation. |
|
||||
| D7 | legend, eingeloggt auf 3 Geräten | → pro/free | 7-Tage-Grace. Danach: nächster App-Start auf überzähligem Gerät → sanfter Logout-Screen; zuletzt aktives bleibt. DNS-Filter auf ausgeloggten Geräten läuft weiter. |
|
||||
| D8 | legend, Coach Haiku, mitten im SOS-Chat | → free | laufende Antwort nicht abbrechen. Nächste Nachricht: Llama 8B. Kurzhinweis. Kein Schutz-/Funktionsverlust. |
|
||||
| D9 | legend, TTS gerade am Sprechen (ElevenLabs) | → free | laufende Ausgabe zu Ende. Nächste: Google-Stimme, 60s/Tag-Cap. Custom-Voice-Auswahl gespeichert. |
|
||||
| D10 | legend, hat Community-Gruppe gegründet | → pro/free | Gruppe bleibt, User bleibt Admin, kann moderieren. "Neue Gruppe" → gated. Andere merken nichts. |
|
||||
| D11 | free, aktiver 7-Tage-Demographics-Pro-Trial | Trial läuft ab | wie D1–D10 wo zutreffend + sanftes Briefing (§4b, "Danke nochmal"-Ton). Kein Daten-Rückzug, keine Schuld-Sprache. |
|
||||
| D12 | pro+MDM-Add-On, MDM-Lock auf supervised iPhone | Add-On kündigen | 7-Tage-Cooldown (Lyra). Danach: NanoMDM pusht `RemoveProfile` (Restriction-Payload); DNS-Payload bleibt. Liability-Override via Admin-API. |
|
||||
| D13 | jeder Downgrade | → runter | Briefing erscheint *vor* der Wirkung, Inhalt = §4b: erst "Schutz bleibt", dann konkrete Änderungsliste, dann "nichts gelöscht", dann Recovery-Sicherheitssatz, dann CTA. Kein "bist du sicher???"-Dialog. |
|
||||
| D14 | jeder Downgrade → späterer Re-Upgrade | → hoch | alles Pausierte/Degradierte reaktiviert sich automatisch, ohne Neu-Einrichtung (Domains, Mail-Accounts, Voice, Geräte-Token, Gruppe-Admin). |
|
||||
|
||||
---
|
||||
|
||||
## 6. Offene Klärungspunkte (bevor das auf die Pricing-Page geht)
|
||||
1. **Ist Mail-Live-IDLE-Scan tatsächlich gebaut?** Code (`mailIntervalOptions:[1,4,8]`) sagt nein, Memory sagt ja. → Backend-Owner fragen, nichts bewerben was nicht im Code ist.
|
||||
2. **Multi-Device-Pfad: MDM-Add-On-Pfad (supervised, remote-removable) oder separater nicht-supervised-Pfad?** Downgrade-Policy D6 hängt davon ab. → klären.
|
||||
3. **Echte Preise:** rebreak.org/pricing war 401 — sobald live, dieses Doc + alle "Annahme"-Stellen nachziehen.
|
||||
4. **Test-Toggle ändert Plan serverseitig?** → ja (`/api/dev/set-plan` setzt `profile.plan`). Bestätigt.
|
||||
5. **MDM-Add-On-Preis:** Strategist-Empfehlung — **5€ statt 3€** (95% Marge, hoher Setup-Support-Aufwand/User, Zielgruppe nicht preissensibel; bei <20 erwarteten Usern Jahr 1 ist Volumen irrelevant → Marge). Bei Volumen-Strategie: 3€.
|
||||
6. **DiGA-SKU:** jetzt *nicht* designen — erst Beta + Wirksamkeitsstudie. Aber Free/Pro/Legend so bauen, dass eine spätere "alles drin, Kasse zahlt"-Variante kein Architektur-Umbau wird.
|
||||
|
||||
---
|
||||
|
||||
## Quellen
|
||||
- Headspace/Calm pricing teardowns (SBI Growth, Headspace Help, Breethe); Quitzilla (Google Play); "Best Addiction Recovery Apps 2025" (ChoosingTherapy)
|
||||
- Intern: `backend/server/utils/plan-features.ts` (`PLAN_LIMITS`), `ops/RELEASE_READINESS.md`, `ops/strategy/mdm-productization-roadmap.md`, `apps/rebreak-native/stores/protectedDevices.ts`, Memory (`project_legend_multi_device_usp`, `project_demographic_pro_trial_reward`, `feedback_anonymity_nickname`, `project_mdm_productization`)
|
||||
Loading…
x
Reference in New Issue
Block a user