Files
RAPPORT-HOST/.env.example
T
karim fb89094b63 feat(billing): Stripe-Code vollständig (Checkout, Portal, Webhooks) — Keys später
- /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>
2026-05-31 12:29:55 +02:00

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}