Commit Graph

7 Commits

Author SHA1 Message Date
karim 42ea5ac272 feat(admin): CSV-Export-Button im Cockpit
Lädt /admin/export/accounts.csv mit Admin-Token (fetch + Blob-Download).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 12:17:33 +02:00
karim db357b8103 feat(admin): Cockpit — Suche/Filter, Kennzahlen, klickbare Kunden-Detailansicht
- Kennzahlen-Kacheln mit Unterzeile (neu/30T, gesperrt, ARR) + Plan-Leiste
- Toolbar: Suche (E-Mail/Firma) + Plan-Filter, live
- Kundentabelle: Zeilen klickbar → Detailansicht
- Detail: Profil, Abo-Historie, Instanzen mit Öffnen/Sperren/Reaktivieren
- fix: Abmelden-Button hatte keinen Handler

E2E: Detail, Suspend→Counter, Reactivate verifiziert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 12:04:32 +02:00
karim 9e24ce8dd6 design: Auth-Seiten als 2-Spalter + Preis-Hierarchie
- Login/Register: links Formular, rechts Vertrauens-Panel (Logo, 🇨🇭 Daten in
  der Schweiz, Backups, kündbar) → wirkt hochwertiger als nackte Box
- Preise: empfohlene Karte hervorgehoben (angehoben, Akzent-Glow, Tönung)
- responsive: Aside/Lift fällt unter 760/860px weg

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 11:38:00 +02:00
karim a4063ca985 feat(admin): separates Betreiber-Login im Frontend + Footer/Rechts-Links
- renderAdminLogin: eigenes Admin-Passwort-Formular, eigener Token
  (rapport_admin_token), getrennt vom Kundenkonto
- renderAdmin nutzt adminApi (Admin-Token); Abmelden-Button
- is_admin-Reste aus Konto-Header und Kundentabelle entfernt

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 10:51:52 +02:00
karim 4cd3e56f89 feat(admin): Admin-Panel-Frontend (/admin)
- content/admin.md (appshell, noindex), renderAdmin in hosting-app.js:
  Kennzahlen-Kacheln (Kunden/Abos/Instanzen/MRR) + Kundentabelle
- Admin-Link im Konto-Header (nur wenn account.is_admin)
- Admin-Styles (Stat-Kacheln, Tabelle) in custom.css

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 00:04:31 +02:00
karim a061bfa18e fix(hugo): Layout hosting→appshell umbenannt (Section-Kollision)
layouts/hosting.html kollidierte mit der content/hosting/-Section → Hugo
verlangte ein section-Template und der Build brach ab (kein public/).
Layout heisst jetzt 'appshell', login/register/konto/hosting-preise
referenzieren es. Build wieder grün, alle Seiten + Tab-CSS verifiziert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 23:55:45 +02:00
karim 60f886bf7a feat(hosting): Hosting-Marketing + Login/Konto als Vanilla-JS-Seiten
Integriert das RAPPORT-Hosting-Angebot direkt in die bestehende Hugo-Seite
(gleicher openbureau/Hextra-Look):
- /hosting        Marketing-Landing (Hero, Feature-Grid)
- /hosting-preise Abo-Übersicht (Plans aus /api/billing/plans)
- /login /register /konto  Vanilla-JS-Seiten (layouts/hosting.html +
  static/js/hosting-app.js), sprechen NUR mit /api
- custom.css: Karten-/Formular-/Plan-Styles im RAPPORT-Token-Set
- Navbar: 'Hosting' + 'Anmelden'

Bleibt sauber AGPL: kein Backend-Code, nur fetch('/api'). Das proprietäre
Backend (Auth/Stripe/Provisioning) liegt in RAPPORT-HOST.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 16:40:28 +02:00