Konzept: Verträge, Hosting-Abo und E-Mail-Zusatzspeicher

Entwurf zur Durchsicht, noch keine Umsetzung. Beschreibt den Bereich
"Verträge", das Hosting-Abo (15 €), beliebig viele Postfächer im
Wartungs-Abo, den Wechsel Hosting -> Wartung (12 neue Monate) und den
Zusatzspeicher (5 GB je 1 €/Monat, Stückzahl im Stripe-Abo) samt
betroffener Rechtstexte, Mails und Dateien.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-09-27 14:54:10 +00:00
1 parent 18c3cdf3e5
commit 65ab5013cb
1 file changed
+519
@@ -0,0 +1,519 @@
# Verträge, Hosting-Abo und E-Mail-Zusatzspeicher – Konzept
Stand 27.09.2026 · Entwurf zur Durchsicht · umgesetzt ist noch nichts
Betrifft das Kundenportal (project.webklar.com), die Website (webklar.com), das Ticketsystem (ticket.webklar.com), Stripe, Hetzner konsoleH und die Rechtstexte.
## 1. Ziel
1. Der Bereich „Wartung“ im Kundenportal heißt künftig **Verträge**. Dort liegt das Abo des Kunden.
2. Neues **Hosting-Abo** für 15 € im Monat: Wir hosten die Website, dazu kommen 1 Domain und 1 E-Mail-Postfach.
3. **Wartungs-Abo** (50 €): Statt einem Postfach gibt es beliebig viele, zusammen 5 GB.
4. Hosting-Kunden können **jederzeit ins Wartungs-Abo wechseln**, auch in den ersten 12 Monaten.
5. **E-Mail-Zusatzspeicher**: je 5 GB für 1 € im Monat, per Plus und Minus im eigenen Bereich, abgerechnet im laufenden Abo über Stripe.
Nicht Teil dieses Konzepts:
- mehrere Abos pro Kunde, etwa für zwei Websites. Pro Kunde gibt es weiterhin höchstens ein laufendes Abo.
- Postfächer selbst im Portal anlegen oder löschen. Hetzner bietet dafür keine Schnittstelle, deshalb läuft das per Anfrage im Chat.
- jährliche Zahlung.
- Rückwechsel von Wartung zu Hosting per Knopf. Das geht nur auf Anfrage (3.6).
## 2. Entscheidungen
| Thema | Entscheidung | Herkunft |
|---|---|---|
| Name des Bereichs | „Verträge“ | Vorgabe |
| Preis Hosting-Abo | 15,00 € pro Monat | Vorgabe |
| Umfang Hosting-Abo | siehe 3.1: ohne Arbeitsstunde, ohne Pflege der Website | Vorschlag, bestätigt |
| Hosting-Abo nur für | statische Websites (3.2) | Vorschlag, bestätigt |
| Domain im Hosting-Abo | ja, 1 Domain | Vorschlag, bestätigt |
| Mindestlaufzeit | beide Abos 12 Monate ab Leistungsbeginn, danach monatlich kündbar | Vorschlag, bestätigt |
| Postfächer | Hosting: 1 Postfach, 5 GB. Wartung: beliebig viele, zusammen 5 GB | Vorgabe |
| Wechsel Hosting → Wartung | jederzeit, als neuer Vertrag. Mit dem Wechsel beginnen 12 neue Monate Mindestlaufzeit (Variante A) | Vorgabe |
| Zusatzspeicher | 5 GB je Paket für 1,00 € pro Monat, in beiden Abos, als zweite Position im selben Stripe-Abo | Vorgabe |
| Aufbau der Rechtstexte | eine gemeinsame Fassung für beide Abos (8.1) | Vorschlag |
| Offene Einzelpunkte | vorbelegt, siehe 13 | Vorschlag, bitte prüfen |
Alle Preise sind Endpreise. Gemäß § 19 UStG wird keine Umsatzsteuer berechnet.
## 3. Produkte
### 3.1 Leistungen im Vergleich
| | Hosting-Abo | Wartungs-Abo |
|---|---|---|
| Preis | 15,00 € pro Monat | 50,00 € pro Monat |
| Website auf unserem Server in Deutschland (Hetzner, Falkenstein) | ✓ | ✓ |
| SSL-Zertifikat, tägliche Datensicherung, Überwachung der Erreichbarkeit | ✓ | ✓ |
| Updates von Betriebssystem und Server-Software | ✓ | ✓ |
| Updates und Pflege der Website selbst | – | ✓ |
| Geeignet für | statische Websites | alle Websites und Web-Anwendungen, die wir erstellt oder zur Betreuung übernommen haben |
| Domain (.de, .com, .eu, .net, .org) | 1 | 1 |
| E-Mail | 1 Postfach, 5 GB | beliebig viele Postfächer, zusammen 5 GB |
| Zusatzspeicher | je 5 GB für 1,00 € pro Monat | je 5 GB für 1,00 € pro Monat |
| Arbeitszeit | nur nach Freigabe, 100 € pro Stunde in 15-Minuten-Schritten | 1 Stunde pro Monat inklusive, darüber 100 € pro Stunde |
| Servicezeiten und Reaktion | wie heute im Wartungs-Abo (Mo–Fr 9–17 Uhr, Antwort bis Ende des nächsten Werktags) | wie heute |
| Mindestlaufzeit | 12 Monate | 12 Monate, auch nach einem Wechsel |
### 3.2 Hosting-Abo: nur statische Websites
- Statisch heißt: Der Webserver liefert die Dateien (HTML, CSS, JavaScript, Bilder) unverändert aus. Dazu gehören auch unsere React- und Vite-Seiten.
- Nicht erlaubt sind ein CMS, ein Login, eine Datenbank und eigener serverseitiger Code wie PHP.
- Der Grund: Eine dynamische Website ohne laufende Updates läge ungepflegt auf demselben Server wie Kundenportal, Datenbank und Rechnungen.
- Kontaktformulare sind nur über einen Dienst möglich, den wir zentral betreiben und pflegen (siehe 13, Punkt 7).
- Braucht eine Website später dynamische Teile, bieten wir den Wechsel ins Wartungs-Abo an.
- Änderungen an der Website gibt es nur nach Freigabe und gegen 100 € pro Stunde, Anfrage im Chat. Die Behebung von Störungen an Server, Domain und Postfach ist inklusive, wie im Wartungs-Abo.
### 3.3 Postfächer (beide Abos)
- Die Postfächer liegen bei Hetzner Webhosting, Rechenzentrum Nürnberg. Das Hosting-Abo hat 1 Postfach, das Wartungs-Abo beliebig viele.
- Hetzner setzt die Speichergrenze je Postfach. „Zusammen 5 GB“ heißt: Die Grenzen aller Postfächer eines Kunden ergeben zusammen höchstens 5 GB plus Zusatzspeicher.
- Wie der Speicher verteilt wird, bestimmt der Kunde. Ohne Vorgabe teilen wir gleichmäßig auf.
- Ist die Grenze eines Postfachs erreicht, nimmt es keine neuen Mails mehr an. Darauf weisen Portal und Bedingungen hin.
- Anlegen, Löschen, neues Passwort oder andere Aufteilung fragt der Kunde im Chat an. Der Knopf „Postfach anfragen“ füllt die Nachricht vor.
- Wir setzen es in konsoleH um, in der Regel innerhalb eines Werktags.
- Zugangsdaten geben wir nur dem Kunden oder den Personen, die er in Textform benennt.
- Faire Nutzung:
- Postfächer nur für den Kunden, seine Beschäftigten und seine Organisation
- kein Weiterverkauf
- kein Newsletter- oder Massenversand
- Es gelten die Versandgrenzen des Anbieters.
- Kapazität: Alle Kundenpostfächer liegen in unserem Hetzner-Paket und teilen sich dessen Speicher (S 10 GB, M 50 GB, L 100 GB, XL 300 GB).
- Das Admin-Panel zeigt die Summe der vergebenen Kontingente: 5 GB je laufendem Abo plus alle Pakete Zusatzspeicher.
- Bevor der belegte Speicher in konsoleH 80 % erreicht, wechseln wir ins nächstgrößere Paket.
### 3.4 E-Mail-Zusatzspeicher
Ein Paket hat 5 GB und kostet 1,00 € pro Monat. Jeder Kunde kann 0 bis 10 Pakete buchen, in beiden Abos, auch Bestandskunden mit Version 3.
**Plus (Bestellung)**
- Direkt über dem Knopf steht eine Übersicht mit:
- neuer Gesamtgröße
- Mehrpreis pro Monat
- anteiligem Betrag für den Rest des laufenden Monats (aus der Stripe-Vorschau)
- Datum der nächsten Abbuchung
- Link auf Bedingungen und Widerrufsbelehrung
- Der Knopf heißt „Zahlungspflichtig bestellen“ (§ 312j Abs. 3 BGB). Der Vertrag kommt mit dem Klick zustande. Bezahlt wird mit der hinterlegten Zahlungsart.
- Abrechnung:
- Den Rest des laufenden Monats berechnet Stripe anteilig mit der nächsten Abbuchung, danach 1,00 € je Paket und Monat.
- Pakete, die für den laufenden Monat schon bezahlt sind (etwa nach einem Minus im selben Monat), werden nicht noch einmal berechnet.
- Bereitstellung: Wir stellen die Grenzen in konsoleH um, in der Regel innerhalb eines Werktags. Bis dahin zeigt das Portal „wird eingerichtet“.
- Der Kunde bekommt eine Bestätigungsmail mit Zusammenfassung und den Vertragsbedingungen als PDF.
**Minus**
- Der Knopf heißt „Speichern“. Die Änderung wirkt zum Ende des laufenden Abrechnungsmonats, ohne anteilige Erstattung.
- Das Portal zeigt „ab TT.MM. X GB“.
- Der Dialog weist darauf hin: Passen die gespeicherten Mails dann nicht mehr hinein, nimmt das betroffene Postfach keine neuen Mails an, bis wieder Platz ist.
- Der Kunde bekommt eine Bestätigungsmail.
**Widerruf**
- Jede Bestellung hat 14 Tage Widerrufsfrist.
- Wir verlangen keinen ausdrücklichen Sofortbeginn und stellen trotzdem sofort bereit.
- Bei Widerruf nehmen wir das Paket zurück und erstatten alles, was dafür gezahlt wurde. Wertersatz verlangen wir nicht.
**Kündigung**
- Jederzeit per Minus oder über „Verträge hier kündigen“ mit der Auswahl „Nur den E-Mail-Zusatzspeicher“.
- Der Zusatzspeicher endet automatisch mit dem Abo. Bei einem Wechsel ins Wartungs-Abo bleibt er unverändert.
### 3.5 Wechsel vom Hosting- ins Wartungs-Abo
- **Wer:** Kunden mit laufendem, bezahltem Hosting-Abo (Stripe-Status `active`). Nicht möglich ist es in der Wartezeit bis zum Leistungsbeginn und bei offener Zahlung.
- **Wann:** jederzeit, auch während der Mindestlaufzeit des Hosting-Abos.
- **Rechtlich:** Es ist ein neuer Vertrag über das Wartungs-Abo. Das Hosting-Abo endet mit dem Wechsel im gegenseitigen Einvernehmen.
- **Bestellung:**
- Direkt über dem Knopf steht eine Übersicht mit:
- Wartungs-Abo 50,00 € pro Monat
- Zusatzspeicher, falls gebucht
- Gutschrift für die ungenutzten Hosting-Tage
- heute fälliger Betrag (aus der Stripe-Vorschau)
- neuer Abbuchungstag
- Ende der neuen Mindestlaufzeit
- Der Kunde stimmt den Vertragsbedingungen (Version 4) einschließlich der Auftragsverarbeitung zu.
- Pflicht-Häkchen: Der Kunde verlangt ausdrücklich, dass wir sofort beginnen, und nimmt die Folge für den Wertersatz zur Kenntnis (§ 357a Abs. 2 BGB). Einen späteren Beginn bietet der Wechsel nicht an.
- Knopf „Zahlungspflichtig bestellen“.
- **Abrechnung:**
- Es bleibt dasselbe Stripe-Abo, der Preis wechselt von Hosting auf Wartung.
- Der Abbuchungstag wird der Wechseltag.
- Die ungenutzten Hosting-Tage werden auf der sofort fälligen Rechnung gutgeschrieben.
- **Leistung:** Sie beginnt sofort. Die erste Stunde Arbeitszeit wird gutgeschrieben, sobald die Wechsel-Rechnung bezahlt ist, danach monatlich.
- **Mindestlaufzeit:** 12 Monate ab dem Wechseltag.
- **Widerruf des Wechsels:**
- Das Hosting-Abo läuft zu den bisherigen Bedingungen weiter, als hätte es den Wechsel nicht gegeben, einschließlich seiner ursprünglichen Mindestlaufzeit.
- Wir erstatten den Mehrbetrag, abzüglich Wertersatz nach § 357a Abs. 2 BGB (anteiliger Mehrpreis bis zum Widerruf).
- Den Preis in Stripe stellen wir von Hand zurück, wie heute bei Widerrufen.
- **Rabatte und Guthaben:** Ein laufender Angebotsrabatt läuft bis zu seinem Ende weiter. Guthaben aus einer Übernahmegutschrift wird weiter verrechnet.
### 3.6 Wechsel vom Wartungs- ins Hosting-Abo
- Möglich erst nach Ablauf der Mindestlaufzeit des Wartungs-Abos, zum Ende eines Abrechnungsmonats. Der Kunde meldet den Wunsch in Textform (Chat oder E-Mail), einen Knopf im Portal gibt es dafür nicht.
- Voraussetzung ist eine statische Website (3.2). Vorher legt der Kunde fest, welches Postfach bleibt. Die anderen exportieren wir auf Wunsch.
- Es beginnt keine neue Mindestlaufzeit, das Hosting-Abo ist danach monatlich kündbar.
- Nicht genutzte Arbeitszeit verfällt mit dem Wechsel, wie bei Vertragsende.
- Umsetzung von Hand: In Stripe wechselt der Preis zum Ende des Abrechnungsmonats auf Hosting, ohne anteilige Verrechnung. Der Kunde bekommt eine Bestätigungsmail.
## 4. Kundenportal
### 4.1 Navigation
- **Menüpunkt „Verträge“:** Er steht am Desktop in der Seitenleiste und in der App-Ansicht in der Tab-Leiste und ersetzt den Tab „Wartung“.
- Hash `#vertraege`. Alte Links mit `#wartung` und `#abo` führen dorthin, `#abo` steht etwa in den Angebots-Mails.
- **Seitenleisten-Karte:** „Ihre Wartung“ heißt künftig „Ihr Vertrag“. Sie zeigt:
- den Produktnamen
- die verfügbare Arbeitszeit, nur beim Wartungs-Abo
- die nächste Abbuchung
- die Hinweise wie heute (Zahlungsproblem, Widerrufsfrist, Übernahmegutschrift)
- **Konto-Menü, Gruppe „Verträge“:**
- Neuer erster Eintrag „Mein Vertrag“, er führt zu `#vertraege`.
- „Vertragsbedingungen“ öffnet die Fassung, der der Kunde zugestimmt hat.
- Die übrigen Einträge bleiben: „Abo verwalten & Rechnungen“, „Verträge hier kündigen“, „Vertrag widerrufen“.
### 4.2 Ansicht „Verträge“
Oben steht **Mein Vertrag**, wenn ein Abo läuft oder beendet ist:
- Produkt, Monatspreis einschließlich Zusatzspeicher und Status (gekündigt, Zahlungsproblem)
- nächste Abbuchung mit Betrag und Hinweis zur Laufzeit („Mindestlaufzeit bis …“)
- nur beim Wartungs-Abo: das Stundenkonto als Unterseite wie heute
- E-Mail-Speicher mit Plus und Minus (4.3) und dem Knopf „Postfach anfragen“
- Unterlagen: Vertragsbedingungen in der zugestimmten Fassung (PDF) und Rechnungen (Stripe-Kundenportal)
- „Übernahmegutschrift beantragen“
- während einer laufenden Widerrufsfrist hervorgehoben „Vertrag widerrufen · bis TT.MM.“ (§ 356a BGB). Das gilt auch für Wechsel und Zusatzspeicher innerhalb ihrer Frist.
- bei einem Zahlungsproblem „Zahlungsart aktualisieren“
Darunter:
- **Hosting-Kunden:** eine Karte „Zum Wartungs-Abo wechseln“ mit den zusätzlichen Leistungen und dem Knopf.
- **Ohne laufendes Abo:** beide Abos nebeneinander, jeweils mit „Abo abschließen“ und eigener Bestellseite (`#bestellen-hosting`, `#bestellen-wartung`). Persönliche Angebote erscheinen bei dem Abo, für das sie gelten.
### 4.3 Zusatzspeicher bedienen
```
E-Mail-Speicher 5 GB inklusive
Zusatzspeicher [ − ] 2 [ + ] × 5 GB = 15 GB gesamt
+ 2,00 € im Monat
[ Zahlungspflichtig bestellen ]
```
- Der Knopf erscheint erst nach einer Änderung.
- Mehr als bisher: Es folgt die Übersicht aus 3.4 und der Knopf „Zahlungspflichtig bestellen“.
- Weniger als bisher: Es folgt der Hinweis auf das Monatsende und der Knopf „Speichern“.
- Solange eine Erhöhung noch nicht eingerichtet ist, steht dort „wird eingerichtet“. Bei einer geplanten Reduzierung steht dort „ab TT.MM. X GB“.
- Plus und Minus gehen nur bei Status `active`, also nicht in der Wartezeit bis zum Leistungsbeginn und nicht bei einem Zahlungsproblem.
### 4.4 Bestellseiten
- **Neuabschluss:**
- Der Ablauf bleibt wie heute:
- Übersicht direkt über dem Knopf
- Zustimmung einschließlich Auftragsverarbeitung
- Wahl zwischen sofortigem Beginn und Beginn nach der Widerrufsfrist
- „Zahlungspflichtig bestellen“, danach Stripe Checkout
- Neu ist, dass jedes Produkt seine eigene Übersicht, seinen Preis und seinen Stripe-Hinweistext bekommt.
- **Wechsel:**
- Eigene Seite `#wechsel` nach 3.5, ohne Stripe Checkout. Belastet wird die hinterlegte Zahlungsart.
- Verlangt die Bank eine Bestätigung (3-D Secure), leitet das Portal auf die Stripe-Zahlungsseite dieser Rechnung weiter.
### 4.5 Öffentliche Formulare ohne Login
- **`kuendigen.html`:** Statt des festen „WEBklar Wartungs-Abo“ wählt der Kunde zwischen zwei Möglichkeiten (§ 312k Abs. 3 BGB verlangt eine eindeutige Bezeichnung des Vertrags):
- „Mein Abo (Hosting- oder Wartungs-Abo, mit Zusatzspeicher)“
- „Nur den E-Mail-Zusatzspeicher“
Die Bestätigung nennt das tatsächliche Abo.
- **`widerrufen.html`:** Der Kunde wählt die Bestellung aus (§ 356a BGB):
- „Abschluss meines Abos“
- „Wechsel ins Wartungs-Abo“
- „E-Mail-Zusatzspeicher“
- **Server:** Er ordnet die Erklärung wie heute über die E-Mail-Adresse zu. Die Auswahl bestimmt, was gekündigt oder widerrufen wird.
## 5. Stripe
Produkte und Preise (monatlich, EUR, `tax_behavior: inclusive` wie heute):
| Produkt | Preis | lookup_key |
|---|---|---|
| WEBklar Wartungs-Abo (besteht) | 50,00 € | `webklar_wartung_monatlich_5000` |
| WEBklar Hosting-Abo (neu) | 15,00 € | `webklar_hosting_monatlich_1500` |
| WEBklar E-Mail-Zusatzspeicher 5 GB (neu) | 1,00 € je Stück | `webklar_mailspeicher_5gb_monatlich_100` |
- **Beschreibung des Wartungs-Produkts:** Sie wird in Stripe auf Version 4 geändert („beliebig viele Postfächer, zusammen 5 GB“). Der Code legt Produkte nur einmal an, deshalb geht das per Skript oder im Stripe-Dashboard.
- **Aufbau:** ein Stripe-Abo je Kunde mit zwei Positionen, dem Abo-Preis (Hosting oder Wartung) und optional dem Zusatzspeicher mit Stückzahl.
- **Aufrufe:**
- Plus: `subscriptions.update` mit der neuen Stückzahl und `proration_behavior: create_prorations`. Bis zur schon bezahlten Stückzahl gilt `none`, notfalls in zwei Schritten.
- Minus: `proration_behavior: none`.
- Wechsel: Preis der Abo-Position tauschen mit `billing_cycle_anchor: now` und `proration_behavior: create_prorations`, dabei dasselbe `proration_date` wie in der Vorschau.
- Den Betrag zeigen wir vorher jeweils mit `invoices.createPreview` an.
- **Stripe-Kundenportal:** Die Überschrift wird „WEBklar – Abo verwalten“. Tarif- und Mengenänderungen bleiben dort aus, weil Stripe unsere Mindestlaufzeiten und Bestellschritte nicht kennt. Die Kündigung dort bleibt ebenfalls aus.
- **Checkout-Hinweistext** (`custom_text`): je Produkt mit Preis und Mindestlaufzeit, statt fest „50,00 € … 12 Monate“.
## 6. Daten (Appwrite, woms-database)
**`subscriptions`** (ein Dokument je Stripe-Abo) bekommt neue Felder:
- `productKey`: `hosting` oder `wartung`. Alte Dokumente ohne Wert gelten als `wartung`.
- `termStartAt`: Beginn der laufenden Mindestlaufzeit. Bei einem Neuabschluss ist das der Leistungsbeginn, bei einem Wechsel der Wechseltag.
- `storageUnits`: gebuchte Pakete Zusatzspeicher.
- `storagePaidUnits` und `storagePaidPeriodEnd`: Pakete, die für den laufenden Monat schon bezahlt sind.
- `planKey` enthält künftig den lookup_key des tatsächlichen Abo-Preises.
**Neue Collection `contractEvents`.** Sie weist jede Bestellung und jede Änderung nach:
- Felder:
- `customerId`, `subscriptionId`
- `type`: `abschluss`, `wechsel`, `speicher`, `kuendigung` oder `widerruf`
- `productKey`
- `details`: JSON mit Stückzahl alt und neu, Beträgen und Wirksamkeitsdatum
- `termsVersion`, `consentAt`, `consentIp`, `consentUserAgent`, `earlyStartConsentAt`
- `status`: `offen`, `erledigt` oder `widerrufen`
- `dueAt`, `doneAt`, `doneBy`, `confirmationSentAt`
- Die offenen `speicher`-Ereignisse sind die Aufgabenliste für konsoleH.
- Aus diesen Ereignissen ergibt sich die Widerrufsfrist je Bestellung. Heute zählt nur `startedAt`.
- Aufbewahrt werden sie wie die bisherigen Zustimmungsdaten: drei Jahre nach Vertragsende (Datenschutzerklärung, Abschnitt 7).
**`aboOffers`** bekommt ein Feld `productKey`. Alte Angebote gelten als `wartung`. Der Normalpreis kommt aus dem Produktkatalog statt fest 50 €.
Einrichtung: `scripts/setup-abo-collections.mjs` wird erweitert.
## 7. Server (Kundenportal)
**`server/config.js`**
- Neuer Produktkatalog mit `products.hosting` und `products.wartung`. Jeder Eintrag enthält:
- Name, Preis und lookup_key
- Stripe-Beschreibung
- Leistungsliste für die Oberfläche
- Mindestlaufzeit und Minuten pro Monat (0 bzw. 60)
- Neu ist auch `mailStorage` mit lookup_key, 100 Cent, 5 GB und höchstens 10 Paketen.
- `abo.termsVersion` bleibt ein einziger Wert, weil es eine gemeinsame Fassung gibt (8.1).
**`server/services/stripeBilling.js`**
- Preise werden je Produkt angelegt oder gefunden.
- `syncSubscription` liest Abo-Preis und Zusatzspeicher aus den Positionen.
- Arbeitszeit gibt es nur, wenn die bezahlte Rechnung eine Wartungs-Position enthält, die keine anteilige Verrechnung ist und mehr als 0 € kostet. Heute bekommt jede bezahlte Abo-Rechnung eine Stunde.
- Checkout je Produkt. Die Sperre „höchstens ein laufendes Abo je Kunde“ bleibt.
- Neu kommen Wechsel, Zusatzspeicher und die Vorschauen dazu.
- Die Mindestlaufzeit zählt ab `termStartAt`.
**`server/routes/abo.js`**
- `GET /api/abo` liefert:
- den Produktkatalog
- `productKey` und Speicherstand
- ob ein Wechsel möglich ist
- das Stundenkonto, aber nur beim Wartungs-Abo
- Neue Aufrufe:
- `POST /api/abo/checkout` mit `productKey`
- `POST /api/abo/switch/preview` und `POST /api/abo/switch`
- `POST /api/abo/storage/preview` und `POST /api/abo/storage`
- Öffentliche Kündigung und öffentlicher Widerruf bekommen das Feld `contract`.
**Mails** (`server/services/mailer.js`): produktneutral, siehe 9.
**Admin** (`public/admin.html`, `public/admin.js`, Routen in `server/routes/portalAdmin.js`)
- Die Abo-Anzeige nennt Produkt und Speicher.
- Neuer Reiter „E-Mail-Speicher“ mit:
- offenen Aufgaben (einrichten, reduzieren zum Datum)
- Knopf „Erledigt“
- Summe der vergebenen Kontingente
- Abo-Angebote bekommen eine Produktauswahl.
**Ticketsystem (WOMS):** Der Schalter „aufs Stundenkonto“ im Arbeitsnachweis erscheint nur bei Kunden mit laufendem Wartungs-Abo.
## 8. Rechtstexte
### 8.1 Aufbau
Eine gemeinsame Fassung „Vertragsbedingungen für die WEBklar-Abos“ in Version 4:
- allgemeiner Teil: Anbieter, Geltungsbereich, Vertragsschluss, Preise und Zahlung, Laufzeit und Kündigung, Wechsel, Zusatzspeicher, Vertragsende, Mängel, Haftung, Datenschutz, Änderungen, Schlussbestimmungen
- Leistungsbeschreibung A (Hosting-Abo) und Leistungsbeschreibung B (Wartungs-Abo)
- Widerrufsbelehrung nach dem gesetzlichen Muster (Wortlaut unverändert) mit Muster-Widerrufsformular
- Anlage 1 Auftragsverarbeitungsvertrag, Anlage 2 TOM, Anlage 3 Unterauftragsverarbeiter, jeweils für beide Abos
Weitere Festlegungen:
- **Adresse:** Sie bleibt `project.webklar.com/abo-bedingungen.html`, weil sie in Mails, auf der Website und im Stripe-Kundenportal steht.
- **PDF:** Das neue heißt `WEBklar-Abo-Vertragsunterlagen.pdf`.
- **Version 3:** Sie wird archiviert (HTML und PDF unter `vertragsunterlagen/v3/`). `WEBklar-Wartungs-Abo-Vertragsunterlagen.pdf` bleibt als Fassung 3 abrufbar, denn § 2 sagt zu, dass wir den Vertragstext speichern.
- **Zustimmung:** Gespeichert werden Version und Produkt.
- **Versionsdatum:** Es ist der Tag der Freigabe in der Rechtsrunde.
### 8.2 Änderungen gegenüber Version 3
- **„Das Wichtigste auf einen Blick“:** beide Abos mit Preisen und Zusatzspeicher.
- **Geltungsbereich:** beide Abos, mit Vorrang vor den AGB einschließlich Leistungsmodul C (jährliches Hosting).
- **Vertragsschluss:**
- Der Bestellweg führt über „Verträge“.
- Wechsel und Zusatzspeicher sind eigene Bestellungen: Knopf, Vertragsschluss mit dem Klick, hinterlegte Zahlungsart, Bestätigungsmail.
- **Leistungen:**
- Aufteilung in A und B.
- Postfächer: 1 bzw. beliebig viele, zusammen 5 GB, Aufteilung, Einrichtung auf Anfrage, volle Postfächer, faire Nutzung, Zugangsdaten nur an den Kunden.
- Das Hosting-Abo gilt nur für statische Websites.
- **Stundenkontingent:** nur im Wartungs-Abo. Die erste Stunde gibt es beim Wechsel.
- **Pflichten des Kunden:**
- Zugangsdaten aller Postfächer geheim halten.
- Weitergabe an Beschäftigte in eigener Verantwortung.
- Im Hosting-Abo keine dynamischen Inhalte ohne Wechsel.
- **Preise und Zahlung:**
- 15 €, 50 € und Zusatzspeicher.
- Anteilige Berechnung beim Plus.
- Abrechnung beim Wechsel.
- Eine Sperre ist ab Verzug mit zwei Monatsgebühren möglich, statt wie bisher ab „100 €“.
- **Laufzeit und Kündigung:**
- Mindestlaufzeiten wie oben. Ein Wechsel startet 12 neue Monate.
- Rückwechsel nach 3.6. Der Zusatzspeicher ist monatlich kündbar.
- „Verträge hier kündigen“ bekommt die Auswahl.
- **Widerruf:** Die Hinweise stehen außerhalb der Musterbelehrung:
- Das Widerrufsrecht gilt je Bestellung.
- Folgen beim Widerruf eines Wechsels.
- Beim Zusatzspeicher kein Wertersatz.
- **Vertragsende:** Export aller Postfächer.
- **Auftragsverarbeitung:**
- Gegenstand sind beide Abos, Datenart „Inhalte der Postfächer“.
- Die Nutzer der Postfächer zählen zu den Betroffenen.
- Bei Widerspruch gegen einen Unterauftragsverarbeiter wird „das Abo“ kündbar.
- **TOM:** „Automatische Überwachung der Erreichbarkeit“ darf nur drinstehen, wenn sie läuft (10).
### 8.3 Weitere Texte
| Text | Änderung |
|---|---|
| Datenschutzerklärung (`public/datenschutz.html` + PDF) | Abschnitt 2 „unsere Abos“. Abschnitt 7 heißt „Abos und Zahlung über Stripe“, Nachweisdaten auch bei Wechsel und Zusatzspeicher. Abschnitt 8: Postfächer „im Rahmen unserer Abos“. Abschnitt 9: „für die Abos über Stripe“. Neues Stand-Datum |
| Kündigungs- und Widerrufsseite | Auswahl nach 4.5, Bestätigungsseite (`legal-form.js`) |
| Bedingungen der Übernahmegutschrift | gelten für beide Abos, `takeover.conditionsVersion` erhöhen |
| AGB webklar.com, Leistungsmodul C | Hosting gibt es als Hosting-Abo nach den Abo-Bedingungen. Bestehende Jahresverträge behalten ihre Fassung. Nr. 9 („jährlich im Voraus“) anpassen |
| Website | `/wartungs-abo` aktualisieren, neue Seite `/hosting-abo`, Link im Footer |
| Leitfaden Empfehlungsgeber (+ PDF) | beide Abos |
| Stripe | Produktbeschreibungen, Checkout-Hinweise |
## 9. Mails
Diese Änderungen gehören in die laufende Überarbeitung aller Portal-Mails. Alle Texte werden produktneutral, Produktname und Leistungen kommen aus dem Katalog.
| Mail | Änderung |
|---|---|
| K01 Vertragsbestätigung | je Produkt, mit PDF der zugestimmten Fassung |
| K02 Kündigungsbestätigung (Stripe) | Produktname. Der Hinweis auf „Abo verwalten“ ist falsch, weil die Kündigung dort aus ist |
| K03 Eingangsbestätigung Kündigung | nennt den gekündigten Vertrag (Abo oder Zusatzspeicher) |
| K04 Eingangsbestätigung Widerruf | nennt die widerrufene Bestellung |
| K05, K06 Angebote | Produkt des Angebots, Normalpreis aus dem Katalog |
| K07–K10 Übernahmegutschrift | „Ihr Abo“ statt „Wartungs-Abo“ |
| neu: Wechsel ins Wartungs-Abo bestätigt | mit PDF, Widerrufsbelehrung und neuer Mindestlaufzeit |
| neu: Zusatzspeicher bestellt oder geändert | Zusammenfassung und Wirksamkeitsdatum, beim Plus mit PDF |
| T02, T05–T09 | Produktname |
| neu intern: Wechsel | Kunde und Beträge |
| neu intern: Speicher-Aufgabe | Kunde, Postfächer, neue Größe, Fälligkeit |
## 10. Voraussetzungen vor dem Start
- Die Überwachung der Erreichbarkeit läuft. Beide Abos und die TOM sagen sie zu, auf dem Server ist sie heute nicht zu finden.
- Unser Hetzner-Paket ist groß genug. Welches Paket wir haben, ist noch zu prüfen.
- Die Rechtsrunde ist abgeschlossen: Version 4, Datenschutz, AGB, Formulare.
- Die produktneutralen Mails sind fertig.
- Die Stripe-Produkte sind angelegt. Ein Live-Check läuft nur mit ausdrücklicher Freigabe.
## 11. Reihenfolge
Die Umsetzung wird in zwei Pläne geteilt.
1. **Rechtstexte als Entwurf für die Rechtsrunde.** Das läuft parallel zu Plan 1.
2. **Plan 1, unsichtbare Vorarbeiten.** Sie können vorher live gehen, ohne sichtbare Änderung und ohne neuen Text:
- Produktkatalog
- `planKey` und `productKey` aus Stripe
- Stunde nur fürs Wartungs-Abo
- Tests
3. **Plan 2, sichtbarer Teil.** Er geht gemeinsam mit Version 4 live und umfasst:
- Ansicht „Verträge“, Bestellseiten, Wechsel und Zusatzspeicher
- Formulare, Admin und Mails
- Website, AGB, Leitfaden und WOMS
Die Ansicht „Verträge“ kann nicht früher live gehen, weil § 2 der Version 3 den heutigen Bestellweg beschreibt.
4. **Start:**
- Stripe-Produkte anlegen
- `termsVersion` auf Version 4 setzen, PDFs erzeugen
- Portal und Website ausliefern und live prüfen
## 12. Tests
- **Unit-Tests** (`npm test`):
- Produktkatalog
- Stundengutschrift: Hosting-Rechnung ergibt keine Stunde, Wartungs-Rechnung 60 Minuten, Wechsel-Rechnung 60 Minuten, reine Speicheränderung keine
- Speicher-Abrechnung: Plus, Minus, erneutes Plus im selben Monat
- Mindestlaufzeit nach einem Wechsel
- Widerrufsfrist je Bestellung
- Zuordnung von Kündigung und Widerruf
- **Server-Ablauf** mit Appwrite-Mock, SMTP-Sink und Fake-Stripe (Aufbau wie bei den bisherigen Tests):
- Neuabschluss je Produkt
- Wechsel mit Vorschau
- Plus und Minus
- Webhooks mit mehreren Positionen
- öffentliche Kündigung und öffentlicher Widerruf
- alle Mails
- **Oberfläche** mit Playwright und Fixtures:
- „Verträge“ in allen Zuständen: kein Abo, Hosting, Wartung, gekündigt, Zahlungsproblem, Widerrufsfrist, Speicher in Einrichtung, Reduzierung geplant
- jeweils auf Handy und Desktop
- Pixelvergleich der übrigen Ansichten
- **Textprüfung:** Alle Dateien im Anhang nach „1 E-Mail-Postfach“ und nach festem „Wartungs-Abo“ durchsuchen.
## 13. Offene Punkte zur Durchsicht
Vorbelegt mit meinem Vorschlag, bitte bestätigen oder ändern:
1. Die Übernahmegutschrift gibt es auch fürs Hosting-Abo.
2. Den Wechsel gibt es nur mit sofortigem Beginn (Pflicht-Häkchen).
3. Zusatzspeicher ohne Häkchen für den Sofortbeginn. Bei Widerruf erstatten wir alles.
4. Laufende Angebotsrabatte laufen beim Wechsel weiter.
5. Rückwechsel von Wartung zu Hosting nur auf Anfrage nach der Mindestlaufzeit. Nicht genutzte Stunden verfallen.
6. Höchstens 10 Pakete Zusatzspeicher je Kunde.
7. Kontaktformulare auf statischen Seiten nur über einen Dienst, den wir zentral betreiben. Zu klären: Wie laufen Formulare heute auf Kundenseiten?
8. Bestandskunden mit Version 3 behalten ihre Fassung.
- Beliebig viele Postfächer bieten wir ihnen kostenlos per Mail an.
- Zusatzspeicher können sie buchen, wenn sie dabei den Regeln zum Zusatzspeicher zustimmen.
9. Abo-Start mit Version 3 jetzt oder erst mit Version 4: Das hängt nicht von diesem Konzept ab.
Außerdem brauche ich Angaben zu:
- unserem Hetzner-Paket
- dem Werkzeug für die Überwachung der Erreichbarkeit, falls schon eins läuft
## Anhang: Dateiliste
**Kundenportal** (`knso/Webklar-Kundenbereich`)
- Rechtstexte:
- `public/abo-bedingungen.html` und `public/WEBklar-Wartungs-Abo-Vertragsunterlagen.pdf`
- `scripts/build-legal-pdfs.sh`
- `public/datenschutz.html` und `docs/WEBklar-Datenschutzerklaerung.pdf`
- Formulare: `public/kuendigen.html`, `public/widerrufen.html`, `public/legal-form.js`
- Oberfläche: `public/dashboard.html`, `public/app.js`, `public/kundenbereich.css`
- Admin: `public/admin.html`, `public/admin.js`
- Server:
- `server/config.js`
- `server/services/stripeBilling.js`, `server/services/offers.js`, `server/services/takeoverCredits.js`, `server/services/mailer.js`, `server/services/hourLedger.js`
- `server/routes/abo.js`, `server/routes/offers.js`, `server/routes/portalAdmin.js`
- Einrichtung: `scripts/setup-abo-collections.mjs`
- Leitfaden: `docs/leitfaden-empfehlungsgeber.html` (+ PDF)
- Tests: neue Dateien unter `test/`
**Website** (`JUSN/Webklar`)
- `src/pages/WartungsAbo.tsx`
- neu: `src/pages/HostingAbo.tsx`
- `src/App.tsx`, `src/components/Footer.tsx`, `src/pages/AGB.tsx`
**Ticketsystem** (`JUSN/tickte-system`)
- `src/components/CreateWorksheetModal.jsx`, `src/components/WorksheetList.jsx`, `src/components/TicketRow.jsx`
**Außerhalb von Git**
- Stripe: Produkte, Preise, Beschreibung, Konfiguration des Kundenportals
- Hetzner konsoleH: Paket, Postfach-Grenzen
- Überwachung der Erreichbarkeit