Alle ausstehenden Aenderungen (Bilder, Texte) fuer den Server-Umzug uebernommen

This commit is contained in:
2026-08-05 18:05:53 +02:00
parent 9af0698056
commit e331965bf1
87 changed files with 8296 additions and 309 deletions
+165
View File
@@ -217,6 +217,171 @@ Auf `zugaenge.html` (verlinkt von `postfach.html`, wenn du als Owner eingeloggt
- CORS ist aktuell offen (`*`) — sobald die finale Domain feststeht, in `src/lib/http.js`
`corsHeaders()` auf die echte Domain einschränken.
## Supporter-Abo (Dogfather) — Setup
Setzt `Dogfather_VanVan_Supporter_Abo.odt` um: eigener, öffentlicher
Supporter-Bereich mit PayPal-Abo (4,99 €/Monat), 30-Monats-Prämienzyklus
(Hasen-Teddys → Tasse & Autogrammkarte → Hoodie) und wechselnden
Kollektionen. **Wichtig: Das Abo selbst gehört nur Dogfather** — die
Teddy-Kollektion/Sammlerstücke entstehen in Kooperation mit VanVan, aber
das Abonnement ist NICHT gemeinsames Branding (klargestellt 03.08.2026).
Code ist **vollständig fertig implementiert**, kann aber
erst wirklich Geld verarbeiten bzw. E-Mails verschicken, sobald folgende
zwei externe Dienste eingerichtet sind — beides Dinge, die **nur der
Website-Betreiber selbst** einrichten kann (eigene Identität/Bankkonto):
```
src/lib/supporter-cycle.js Reine Rechenlogik: 30-Monats-Zyklus/Meilensteine
src/lib/supporter-auth.js Registrierung/Login (E-Mail-Code, eigene Sessions)
src/lib/supporter-mail.js Transaktions-E-Mails (Resend-Adapter)
src/lib/paypal.js PayPal Subscriptions API + Webhook-Signaturprüfung
src/routes/supporter.js Öffentlicher Supporter-Bereich (Profil/Prämien/Archiv)
src/routes/supporter-paypal.js Abo starten/kündigen + Webhook-Verarbeitung
src/routes/supporter-admin.js Interner Administrationsbereich (Abonnentenübersicht etc.)
migrations/0003_supporter_abo.sql D1-Schema (komplett getrennt vom Team-Zugangssystem)
```
### 1) D1-Migration ausführen (einmalig)
```bash
npx wrangler d1 execute dogfather-universe-db --remote --file=migrations/0003_supporter_abo.sql
```
### 2) PayPal-Business-Konto + Abo-Plan einrichten
1. PayPal-Business-Konto anlegen (falls noch nicht vorhanden): https://www.paypal.com/business
2. Developer-App anlegen: https://developer.paypal.com/dashboard/applications → **Create App**
(zuerst im **Sandbox**-Modus testen, siehe unten).
3. Ein Produkt anlegen (Katalog-Produkt, Typ "Service") mit dem Namen
**„Dogfather Supporter-Abo"**.
4. Einen Abo-Plan zu diesem Produkt anlegen: 4,99 € / Monat, EUR, monatliche
automatische Verlängerung, **keine** Testphase, **keine** Einrichtungsgebühr.
5. Einen Webhook anlegen, Ziel-URL:
`https://dogfather-universe-postfach.dogfather1608.workers.dev/supporter/paypal-webhook`
Mindestens folgende Ereignisse abonnieren: `BILLING.SUBSCRIPTION.ACTIVATED`,
`BILLING.SUBSCRIPTION.UPDATED`, `BILLING.SUBSCRIPTION.CANCELLED`,
`BILLING.SUBSCRIPTION.SUSPENDED`, `BILLING.SUBSCRIPTION.EXPIRED`,
`PAYMENT.SALE.COMPLETED`, `PAYMENT.SALE.DENIED`, `PAYMENT.SALE.REFUNDED`,
`PAYMENT.SALE.REVERSED`.
Aus diesen Schritten bekommst du 4 Werte, die als Secrets gesetzt werden
(NIE im Code, NIE im Repo):
```bash
npx wrangler secret put PAYPAL_CLIENT_ID
npx wrangler secret put PAYPAL_CLIENT_SECRET
npx wrangler secret put PAYPAL_PLAN_ID
npx wrangler secret put PAYPAL_WEBHOOK_ID
```
Und in `wrangler.toml` unter `[vars]` (unkritisch, kein Geheimnis):
```toml
PAYPAL_ENV = "sandbox" # später auf "live" umstellen, siehe Abschnitt 7 des Auftrags
```
**Erst vollständig in der Sandbox testen** (eigenes Sandbox-Business- und
Sandbox-Privatkonto unter https://developer.paypal.com/dashboard/accounts),
danach `PAYPAL_ENV` auf `"live"` umstellen und Schritte 2-5 mit den echten
Live-Zugangsdaten wiederholen. Solange die Secrets fehlen, antworten alle
PayPal-Endpunkte kontrolliert mit `PAYPAL_NOT_CONFIGURED` statt abzustürzen.
**Zahlarten-Abdeckung (03.08.2026 ergänzt):** Das Frontend nutzt jetzt die
offiziellen PayPal Smart Payment Buttons (`abonnieren.html`) statt einer
reinen Weiterleitung — dadurch zeigt PayPal automatisch ALLE für die
jeweilige Käuferin/den jeweiligen Käufer verfügbaren, in Deutschland
gängigen Zahlarten an (PayPal-Guthaben/-Bankkonto, Kreditkarte auch als
Gast ohne eigenes PayPal-Konto). Das ist bewusst PayPal selbst überlassen
(kein eigenes Karten-/SEPA-/Klarna-Backend nötig) — das Geld landet dabei
immer direkt auf **deinem eigenen** PayPal-Business-Konto (dieselben
`PAYPAL_CLIENT_ID`/`PAYPAL_PLAN_ID` wie oben). Es ist keine zusätzliche
Einstellung nötig — welche Zahlarten genau angezeigt werden, entscheidet
PayPal automatisch je nach Land/Konto deiner Supporter.
### 3) "Mit Google anmelden" einrichten (optional, aber empfohlen)
Zusätzlich zum E-Mail-Code-Login gibt es jetzt einen "Mit Google anmelden"-
Button (professionellerer, schnellerer Login — Google hat die E-Mail-Adresse
bereits selbst bestätigt, kein Extra-Code nötig). Komplett optional: ohne
`GOOGLE_CLIENT_ID` bleibt der Button einfach ausgeblendet, der normale
E-Mail-Code-Login funktioniert unverändert.
1. https://console.cloud.google.com/apis/credentials öffnen (kostenloses
Google-Konto reicht, keine Kreditkarte nötig).
2. Falls noch nicht vorhanden: **OAuth-Zustimmungsbildschirm** einmalig
einrichten (App-Name z.B. "Dogfather Supporter-Abo", externe Nutzer).
3. **Anmeldedaten erstellen → OAuth-Client-ID → Webanwendung.**
4. Unter **Autorisierte JavaScript-Quellen** deine echte Domain eintragen
(sobald vorhanden) sowie zum Testen
`https://dogfather-universe.dogfather1608.workers.dev`.
5. Die erzeugte Client-ID (endet auf `.apps.googleusercontent.com`) als
Secret setzen:
```bash
npx wrangler secret put GOOGLE_CLIENT_ID
```
Kein Client-Secret nötig — die Anmeldung läuft komplett über Googles
"Sign In With Google"-Button im Browser, der Worker prüft das dabei
ausgestellte Token nur gegen Googles öffentlichen `tokeninfo`-Endpunkt.
### 4) E-Mail-Versand einrichten (Resend, kostenloser Tier reicht)
Ohne E-Mail-Versand können sich Supporter nicht registrieren/einloggen
(E-Mail-Bestätigung/Login-Code). Benötigt außerdem eine **eigene, per
SPF/DKIM verifizierte Domain** (auf `*.workers.dev` allein funktioniert
zuverlässiger E-Mail-Versand nicht).
1. Account auf https://resend.com anlegen (kostenlos bis 3.000 E-Mails/Monat).
2. Eigene Domain hinzufügen und die angezeigten DNS-Einträge setzen.
3. API-Key erstellen.
```bash
npx wrangler secret put RESEND_API_KEY
```
Und in `wrangler.toml` unter `[vars]`:
```toml
RESEND_FROM = "Dogfather Team <[email protected]>"
```
### 5) Deployen
```bash
npx wrangler deploy
```
### 6) Berechtigung für den Administrationsbereich vergeben
Auf `zugaenge.html` einer Rolle (oder dir selbst als Owner, der hat ohnehin
alles) die neuen Rechte **„Supporter-Abonnenten ansehen"**, **„Supporter-
Prämien & Versand verwalten"** und **„Supporter-Kollektionen verwalten"**
zuweisen (Gruppe „Supporter-Abo" in der Rechteverwaltung).
### Verbindliche Prämienlogik (nicht verändern, Abschnitt 11-13 des Auftrags)
| Erfolgreich bezahlte Monate (im laufenden Zyklus) | Prämie |
|---|---|
| 6 | Kleiner Hasen-Teddy |
| 12 | Mittelgroßer Hasen-Teddy |
| 18 | Großer Hasen-Teddy |
| 24 | Tasse & Autogrammkarte |
| 30 | Exklusiver Hoodie — Zyklus abgeschlossen |
| 31+ | Neuer 30-Monats-Zyklus, neue Kollektion, Fortschritt bei 0 (Gesamt-Mitgliedschaftsdauer bleibt erhalten) |
Testzahlungen (Sandbox) zählen **nie** als echter Monat. Jedes
PayPal-Ereignis wird per `paypal_event_id` genau einmal verarbeitet
(keine doppelte Anrechnung bei erneuter Zustellung).
### Bewusst noch nicht gebaut (nächste Ausbaustufe, nicht Teil der Abnahmekriterien)
Abschnitt 20 des Auftrags ("Zusätzliche Vorteile") beschreibt optionale
Bonus-Features — Abstimmungen, Downloads, Supporter-Wand, Jubiläums-
Videobotschaften. Die Datenbankstruktur lässt Raum dafür, sie sind aber
bewusst **nicht** Teil dieser ersten Ausbaustufe, da sie in den
"Verbindlichen Abnahmekriterien" (Abschnitt 34) nicht gefordert sind.
## Wartung
- Bewerbungen/Zugänge/Rollen: alles über `zugaenge.html` bzw. `postfach.html` als Owner.