karim 6a2393301d feat(admin): Betreiber-Panel (/api/admin) mit is_admin-Flag
- 0003_admin.sql: accounts.is_admin
- auth.js: ensureAdminFlag (Konto = ADMIN_EMAIL wird auto-promoted),
  is_admin im JWT, requireAdmin-Middleware (prüft DB autoritativ)
- routes/admin.js: GET /stats (Kunden/Abos/Instanzen/MRR), GET /accounts,
  GET /accounts/:id/instances, POST /instances/:id/{suspend,reactivate}
- register/login + /account/me liefern is_admin
- ADMIN_EMAIL in .env.example

E2E: Admin-Promotion, Kunde→403, Stats (2 Kunden/MRR 49), Kundenliste.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 00:04:19 +02:00

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):

  1. Registrierung + Login (HOST-Konten, JWT)
  2. Abo-Plan wählen → Stripe-Checkout (oder Mock-Sofortfreischaltung)
  3. Webhook → Instanz provisionieren (Modell A: Studio im geteilten Stack)
  4. 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).

S
Description
Proprietäre Hosting-/Abo-Plattform für Rapport-Instanzen (Stripe + Provisioning)
Readme 233 KiB
Languages
JavaScript 100%