fb89094b63
- /checkout: Subscription-Session (Karte), Customer-Wiederverwendung, locale de, Metadata auf Session+Subscription. TWINT bewusst weg (Stripe: nur Einmalzahlung). - /portal: Stripe Customer Portal (kündigen/Karte/Rechnungen); Mock → /konto/. - Webhook: + customer.subscription.updated (Status/Periode spiegeln, Instanz sperren/reaktivieren) + invoice.payment_failed (→ past_due). - .env.example: Stripe-Setup-Anleitung; ADMIN_EMAIL→ADMIN_PASSWORD korrigiert. Alles MOCK-fähig (CHANGE-ME → kein echtes Stripe). Echt-Test erst mit Keys. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
49 lines
2.7 KiB
Bash
49 lines
2.7 KiB
Bash
# ─────────────────────────────────────────────────────────────────────────────
|
|
# RAPPORT-HOST — Konfiguration
|
|
# Kopiere nach .env (lokal) bzw. setze die Werte in der Hetzner-Umgebung.
|
|
# .env steht in .gitignore — niemals committen.
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
# ═══ Server ═══
|
|
PORT=8787
|
|
# Basis-URL, unter der RAPPORT-HOST erreichbar ist (für Stripe-Redirects).
|
|
# Lokal: http://localhost:8787 · Prod: https://host.rapport.studio
|
|
PUBLIC_BASE_URL=http://localhost:8787
|
|
|
|
# ═══ Auth ═══
|
|
# JWT-Signatur-Secret für HOST-Kundenkonten. openssl rand -hex 32
|
|
JWT_SECRET=CHANGE-ME-min-32-zeichen
|
|
# Passwort für den Betreiber-Bereich (/admin), getrennt von Kundenkonten.
|
|
ADMIN_PASSWORD=CHANGE-ME-admin-passwort
|
|
|
|
# ═══ Postgres (eigene HOST-DB, GETRENNT von Kunden-Rapport-Daten) ═══
|
|
DATABASE_URL=postgres://rapport_host:rapport_host@localhost:55432/rapport_host
|
|
|
|
# ═══ Stripe ═══ (solange CHANGE-ME → MOCK-Modus, kein echtes Geld)
|
|
# Setup wenn du so weit bist:
|
|
# 1. Stripe-Account, Test-Modus aktivieren
|
|
# 2. Entwickler → API-Keys: Secret Key (sk_test_…) → STRIPE_SECRET_KEY
|
|
# 3. Produkte: 3 Stück mit je 1 wiederkehrendem Preis (CHF/Monat) →
|
|
# Price-IDs (price_…) unten eintragen
|
|
# 4. Webhook auf https://DEINE-URL/api/billing/webhook, Events:
|
|
# checkout.session.completed, customer.subscription.updated,
|
|
# customer.subscription.deleted, invoice.payment_failed
|
|
# → Signing Secret (whsec_…) → STRIPE_WEBHOOK_SECRET
|
|
# Lokal testen: stripe listen --forward-to localhost:8787/api/billing/webhook
|
|
# TWINT: Stripe unterstützt es nur für Einmalzahlung, nicht Abos → Abo läuft
|
|
# über Karte; TWINT später als separater Einmal-Checkout.
|
|
STRIPE_SECRET_KEY=sk_test_CHANGE-ME
|
|
STRIPE_WEBHOOK_SECRET=whsec_CHANGE-ME
|
|
STRIPE_PRICE_SOLO=price_CHANGE-ME
|
|
STRIPE_PRICE_STUDIO=price_CHANGE-ME
|
|
STRIPE_PRICE_BUSINESS=price_CHANGE-ME
|
|
|
|
# ═══ Provisioning (Modell A: geteilter Rapport-Stack) ═══
|
|
# Wenn LEER: MOCK-Modus — Instanz wird nur als DB-Eintrag simuliert, der ganze
|
|
# Flow ist ohne laufenden Rapport-Stack testbar.
|
|
# Wenn gesetzt: echtes Provisioning gegen den geteilten Rapport-Stack.
|
|
RAPPORT_API_URL=
|
|
RAPPORT_SERVICE_KEY=
|
|
# URL-Template für die fertige Kunden-Instanz. {slug} wird ersetzt.
|
|
RAPPORT_INSTANCE_URL_TEMPLATE=http://localhost:8080/?studio={slug}
|