- env.js: '…CHANGE-ME'-Platzhalter aus .env.example zählen als NICHT gesetzt. Vorher galt sk_test_CHANGE-ME als echter Stripe-Key → echter API-Call mit ungültigem Key → 401 → unhandledRejection → Server-Crash. - billing.js: /checkout in try/catch → 502 statt Empty-Reply/Crash. - index.js: globaler Express-Error-Handler + unhandledRejection-Guard, damit ein einzelner async-Fehler nie den ganzen Prozess killt. E2E verifiziert (Mock): register→checkout→instance, idempotent (1 sub/1 inst), 401 bei falschem PW, Server lebt nach allen Requests. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
RAPPORT-HOST
⚠️ Proprietär & kommerziell — im Gegensatz zur restlichen Rapport-Familie (AGPL). Siehe LICENSE. Niemals AGPL-Code direkt einbinden.
Die Hosting- und Abo-Plattform für Rapport. Kunden registrieren sich, wählen ein Abo (Stripe), und bekommen automatisch eine eigene Rapport-Instanz freigeschaltet.
Teil der Rapport-Familie:
| Repo | Rolle | Lizenz |
|---|---|---|
APP |
Desktop-/Web-Client | AGPL |
SERVER-CONTAINER |
Self-Host Docker-Stack | AGPL |
SERVER-APP |
Mac-Doppelklick-Server | AGPL |
SERVER-PROXMOX-LXC |
Proxmox-Installer | AGPL |
RAPPORT-HOST |
Kommerzielle Hosting-Plattform | Proprietär |
Status: Iteration 1
End-to-End-Flow lokal testbar (auch ohne Stripe/Rapport-Stack dank MOCK-Modus):
- Registrierung + Login (HOST-Konten, JWT)
- Abo-Plan wählen → Stripe-Checkout (oder Mock-Sofortfreischaltung)
- Webhook → Instanz provisionieren (Modell A: Studio im geteilten Stack)
- Kunden-Dashboard mit Abo-Status + Link zur Instanz
Noch offen: Super-Admin, QR-Rechnung, echtes Rapport-Provisioning-RPC, Modell B (eigener Container).
Architektur in einem Satz
React-Frontend (src/) spricht über /api mit einem Node/Express-Backend (server/), das HOST-Konten + Abos in einer eigenen Postgres hält und bei bezahltem Abo eine Rapport-Instanz provisioniert. Details: ARCHITECTURE.md.
Lokal starten
# 1. HOST-Datenbank (Container)
docker compose up -d host-db
# 2. Backend-Dependencies + Schema
cd server && npm install && cd ..
npm run server:migrate
# 3. .env anlegen
cp .env.example .env # Defaults reichen für den MOCK-Modus
# 4. Frontend-Dependencies
npm install
# 5. In zwei Terminals:
npm run server # Backend → :8787
npm run dev # Frontend → :5273
Öffne http://localhost:5273 → registrieren → Plan wählen. Ohne Stripe-Keys schaltet der MOCK-Modus die Instanz sofort frei, und das Dashboard zeigt den (simulierten) Instanz-Link.
Mit echtem Stripe (Test-Mode)
.env mit STRIPE_SECRET_KEY=sk_test_… + STRIPE_PRICE_* füllen. Webhook lokal
weiterleiten:
stripe listen --forward-to localhost:8787/api/billing/webhook
# das ausgegebene whsec_… in STRIPE_WEBHOOK_SECRET eintragen
Test-Karte: 4242 4242 4242 4242, beliebiges Zukunftsdatum + CVC.
Deploy (Hetzner, später)
Identischer Code — nur .env mit Live-Werten (sk_live_…, echte
DATABASE_URL, PUBLIC_BASE_URL=https://…, RAPPORT_API_URL/SERVICE_KEY
für echtes Provisioning). Das app-Image in docker-compose.yml ist dafür
vorbereitet (auskommentiert).