Webbasierte Kaffeeliste für bis zu aktive Teilnehmer
+
Monatliche Abrechnung im Voraus über Stripe; keine Versand- oder Zusatzkosten
+
Unbefristeter Vertrag, keine Mindestlaufzeit über die laufende Monatsperiode hinaus
+
Jederzeit kündbar zum Ende der laufenden Abrechnungsperiode
+
Erforderlich: aktueller Browser, Internetzugang und erreichbare E-Mail-Adresse
+
Gesetzliche Mängelrechte und Aktualisierungsansprüche bleiben bestehen
+
+
+
Tarifwechsel: Die neue Teilnehmergrenze gilt sofort. Für die laufende Periode gibt es keine zusätzliche Belastung oder Gutschrift; ab der nächsten Verlängerung werden € monatlich berechnet.
+
+
Neubuchung: Nach dieser Bestätigung wirst du zur sicheren Stripe-Zahlungsseite weitergeleitet. Dort wählst du das Zahlungsmittel und schließt die Bestellung abschließend ab.
+
+
Anbieter: Clemens Creutzburg, CTB-IT, In den Sieben Stücken 9d, 30655 Hannover. Kontakt siehe Impressum.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/abo-upgrade.php b/abo-upgrade.php
index fe65057..0bc50fa 100644
--- a/abo-upgrade.php
+++ b/abo-upgrade.php
@@ -4,6 +4,7 @@ require_once __DIR__ . '/functions.php';
require_once __DIR__ . '/app/billing.php';
require_once __DIR__ . '/app/audit.php';
require_once __DIR__ . '/app/saas-mail.php';
+require_once __DIR__ . '/app/legal.php';
$pdo = app_db_pdo();
$user = saas_require_login();
@@ -34,12 +35,22 @@ if (!billing_plan_selectable_for($pdo, $tenantId, $planCode)) {
exit('Dieser Tarif deckt eure aktuelle Teilnehmerzahl nicht ab. Bitte einen passenden Tarif wählen.');
}
+if ($planCode !== 'free' && !in_array((string)($user['customer_type'] ?? ''), ['business', 'consumer'], true)) {
+ http_response_code(400);
+ exit('Bitte wähle zuerst in den Mandant-Einstellungen, ob der Vertrag geschäftlich oder als Verbraucher geführt wird.');
+}
+
$billing = billing_fetch_or_init($pdo, $tenantId);
$baseUrl = saas_app_url('mandant-einstellungen.php');
+if ($planCode !== 'free' && !empty($user['contract_ends_at'])) {
+ http_response_code(409);
+ exit('Für diesen Vertrag liegt bereits eine Kündigung vor. Bitte nutze das Ticketsystem, wenn du sie zurücknehmen möchtest.');
+}
+
try {
- // Fall 1: Wechsel auf "free" (kein Stripe-Preis) mit bestehender bezahlter
- // Subscription -> echtes Kuendigen der Subscription, kein Checkout noetig.
+ // Wechsel auf "free": die bezahlte Subscription wird zum Ende der bereits
+ // bezahlten Periode gekündigt. Bis dahin bleiben Tarif und Funktionen aktiv.
if ($plans[$planCode]['stripe_lookup_key'] === null) {
if ($planCode !== 'free') {
// enterprise hat ebenfalls keinen Stripe-Preis, ist aber kein
@@ -49,7 +60,7 @@ try {
}
if ($billing['stripe_subscription_id'] !== null) {
- $cancelResult = stripe_cancel_subscription((string)$billing['stripe_subscription_id']);
+ $cancelResult = stripe_schedule_subscription_cancellation((string)$billing['stripe_subscription_id']);
if (!$cancelResult['ok']) {
app_audit_log($pdo, $tenantId, (int)$user['user_id'], 'billing.downgrade_failed', 'tenant', $tenantId, ['plan_code' => $planCode, 'error' => $cancelResult['error']]);
http_response_code(502);
@@ -57,11 +68,20 @@ try {
}
}
- billing_update($pdo, $tenantId, [
- 'plan_code' => 'free',
- 'subscription_status' => 'canceled',
+ if ($billing['stripe_subscription_id'] === null) {
+ billing_update($pdo, $tenantId, [
+ 'plan_code' => 'free',
+ 'subscription_status' => 'active',
+ ]);
+ } else {
+ billing_update($pdo, $tenantId, [
+ 'subscription_status' => 'canceling',
+ 'current_period_end' => $cancelResult['current_period_end'],
+ ]);
+ }
+ app_audit_log($pdo, $tenantId, (int)$user['user_id'], 'billing.cancellation_scheduled', 'tenant', $tenantId, [
+ 'current_period_end' => $cancelResult['current_period_end'] ?? null,
]);
- app_audit_log($pdo, $tenantId, (int)$user['user_id'], 'billing.downgraded_to_free', 'tenant', $tenantId);
header('Location: ' . $baseUrl . '?upgrade=success');
exit;
@@ -73,10 +93,24 @@ try {
exit('Der Tarif ist bei Stripe aktuell nicht verfügbar. Bitte später erneut versuchen.');
}
+ if (empty($_POST['accept_terms']) || empty($_POST['acknowledge_withdrawal']) || empty($_POST['request_early_performance'])) {
+ http_response_code(400);
+ exit('Bitte bestätige AGB, Widerrufsbelehrung und den gewünschten sofortigen Leistungsbeginn auf der Bestellseite.');
+ }
+
+ $orderMetadata = [
+ 'plan_code' => $planCode,
+ 'monthly_price_cents' => (int)$plans[$planCode]['price_cents'],
+ 'customer_type' => (string)($user['customer_type'] ?? 'business'),
+ ];
+ app_record_legal_acceptance($pdo, $tenantId, (int)$user['user_id'], 'terms', 'paid_order', $orderMetadata);
+ app_record_legal_acceptance($pdo, $tenantId, (int)$user['user_id'], 'withdrawal_information', 'paid_order', $orderMetadata);
+ app_record_legal_acceptance($pdo, $tenantId, (int)$user['user_id'], 'early_performance', 'paid_order', $orderMetadata);
+
// Fall 2: Es gibt bereits eine aktive/bezahlte Subscription bei Stripe ->
// Preis in-place wechseln (Up- oder Downgrade zwischen bezahlten Stufen),
// statt eine weitere Checkout-Session zu erzeugen. Stripe rechnet die
- // Differenz automatisch anteilig ab (Proration).
+ // neue Preis gilt ohne Zwischenbelastung ab der nächsten Verlängerung.
if ($billing['stripe_subscription_id'] !== null) {
$subscription = stripe_get_subscription((string)$billing['stripe_subscription_id']);
@@ -102,6 +136,15 @@ try {
]);
app_audit_log($pdo, $tenantId, (int)$user['user_id'], 'billing.plan_switched', 'tenant', $tenantId, ['plan_code' => $planCode]);
+ $confirmation = saas_send_paid_contract_confirmation($pdo, $tenantId, $planCode);
+ if (empty($confirmation['ok'])) {
+ app_audit_log($pdo, $tenantId, (int)$user['user_id'], 'billing.contract_confirmation_failed', 'tenant', $tenantId, [
+ 'error' => $confirmation['error'] ?? 'unknown',
+ ]);
+ header('Location: ' . $baseUrl . '?upgrade=success&contract_mail_failed=1');
+ exit;
+ }
+
header('Location: ' . $baseUrl . '?upgrade=success');
exit;
}
diff --git a/agb.php b/agb.php
index f25da56..d18e96f 100644
--- a/agb.php
+++ b/agb.php
@@ -1,127 +1,29 @@
-
+
AGB – Kaffeeliste
-
-
-
-
+
+
+
+
-
-
-
Allgemeine Geschäftsbedingungen
-
-
-
-
Hinweis: Dies ist ein Entwurf, automatisiert aus der
- Produktbeschreibung abgeleitet. Er ersetzt keine anwaltliche Prüfung und
- sollte vor Produktivbetrieb von einem Rechtsanwalt bzw. einer
- Rechtsanwältin für IT-/Vertragsrecht geprüft und an den tatsächlichen
- Geschäftsbetrieb angepasst werden – insbesondere Haftungsbegrenzung,
- Kündigungsfristen und die konkrete Preisliste.
-
-
-
§ 1 Geltungsbereich
-
Diese Allgemeinen Geschäftsbedingungen (AGB) gelten für alle
- Verträge zwischen Clemens Creutzburg (nachfolgend „Anbieter") und
- Unternehmen, die den Dienst „Kaffeeliste" (nachfolgend „Dienst") als
- Kunde nutzen. Der Dienst richtet sich ausschließlich an Unternehmer im
- Sinne von § 14 BGB, nicht an Verbraucher.
-
-
§ 2 Vertragsschluss
-
Der Vertrag kommt durch die Registrierung eines Kundenkontos und die
- Bestätigung dieser AGB zustande. Der Anbieter behält sich vor, eine
- Registrierung ohne Angabe von Gründen abzulehnen.
-
-
§ 3 Leistungsbeschreibung
-
Der Anbieter stellt eine webbasierte Anwendung zur Verwaltung einer
- internen Kaffee- oder Getränkekasse bereit, insbesondere zur Erfassung von
- Verbrauch, Einzahlungen, Salden sowie zur Verwaltung von Mitgliedern und
- Zugängen des Kunden. Der konkrete Funktionsumfang ergibt sich aus der
- jeweils aktuellen Produktbeschreibung. Der Anbieter ist berechtigt, den
- Dienst weiterzuentwickeln, sofern der vertraglich vereinbarte
- Funktionsumfang im Kern erhalten bleibt.
-
-
§ 4 Preise und Zahlungsbedingungen
-
Es gelten die jeweils aktuellen, unter Preise
- veröffentlichten Preise, gestaffelt nach der Anzahl aktiver Teilnehmer des
- Kunden. Der Anbieter ist gemäß § 19 UStG von der Umsatzsteuer befreit; die
- genannten Preise sind Endpreise ohne gesonderten Ausweis von
- Umsatzsteuer. Die Abrechnung erfolgt monatlich im Voraus. Bei
- Überschreiten einer Teilnehmerstufe während der Laufzeit wird automatisch
- zur nächsthöheren Preisstufe gewechselt. Preisänderungen werden dem Kunden
- vor Wirksamwerden in Textform angekündigt.
-
-
§ 5 Pflichten des Kunden
-
Der Kunde ist für die Rechtmäßigkeit der Verarbeitung
- personenbezogener Daten seiner Mitglieder im Dienst verantwortlich
- (Verantwortlicher im Sinne der DSGVO). Der Kunde ist verpflichtet, seine
- Zugangsdaten vertraulich zu behandeln und den Anbieter unverzüglich über
- einen Verdacht auf unbefugten Zugriff zu informieren.
-
-
§ 6 Verfügbarkeit
-
Der Anbieter ist bemüht, den Dienst mit einer angemessenen
- Verfügbarkeit im Jahresmittel bereitzustellen. Wartungsfenster werden nach
- Möglichkeit außerhalb der üblichen Geschäftszeiten durchgeführt. Ein
- bestimmter Verfügbarkeitsgrad wird ohne gesonderte SLA-Vereinbarung nicht
- geschuldet.
-
-
§ 7 Datenschutz und Auftragsverarbeitung
-
Der Anbieter verarbeitet personenbezogene Daten der Mitglieder des
- Kunden ausschließlich im Auftrag und nach Weisung des Kunden. Die Details
- regelt ein gesonderter Auftragsverarbeitungsvertrag (AVV), den der Kunde
- vor Verarbeitung personenbezogener Daten mit dem Anbieter abschließt.
- Einzelheiten zur Verarbeitung sind der Datenschutzerklärung zu entnehmen.
-
-
§ 8 Laufzeit und Kündigung
-
Der Vertrag läuft auf unbestimmte Zeit und ist von beiden Seiten mit
- einer Frist von einem Monat zum Monatsende kündbar, sofern nichts anderes
- vereinbart ist. Das Recht zur außerordentlichen Kündigung aus wichtigem
- Grund bleibt unberührt. Nach Vertragsende kann der Kunde seine Daten über
- die Exportfunktion herunterladen; die Daten werden nach angemessener Frist
- gelöscht.
-
-
§ 9 Haftung
-
Der Anbieter haftet unbeschränkt für Vorsatz und grobe Fahrlässigkeit
- sowie nach Maßgabe des Produkthaftungsgesetzes. Für leichte Fahrlässigkeit
- haftet der Anbieter nur bei Verletzung einer wesentlichen Vertragspflicht
- (Kardinalpflicht) und begrenzt auf den vertragstypisch vorhersehbaren
- Schaden. Im Übrigen ist die Haftung ausgeschlossen.
-
-
§ 10 Änderungen dieser AGB
-
Der Anbieter kann diese AGB mit Wirkung für die Zukunft ändern, sofern
- dies zur Anpassung an geänderte rechtliche oder technische
- Rahmenbedingungen erforderlich ist. Der Kunde wird über Änderungen
- rechtzeitig informiert und kann widersprechen; im Falle des Widerspruchs
- gilt § 8.
-
-
§ 11 Schlussbestimmungen
-
Es gilt das Recht der Bundesrepublik Deutschland unter Ausschluss des
- UN-Kaufrechts. Gerichtsstand ist, soweit gesetzlich zulässig, der Sitz des
- Anbieters. Sollte eine Bestimmung dieser AGB unwirksam sein, bleibt die
- Wirksamkeit der übrigen Bestimmungen unberührt.
+
+
+
+
+
+
+
+
diff --git a/backoffice.php b/backoffice.php
index 03c6602..94cdc6c 100644
--- a/backoffice.php
+++ b/backoffice.php
@@ -9,6 +9,16 @@ $user = app_require_platform_admin($pdo);
$tenants = app_backoffice_fetch_tenants($pdo);
$billingPlans = billing_plans();
+$legalRequests = $pdo->query(
+ "SELECT lr.id, lr.reference_code, lr.request_type, lr.requester_name,
+ lr.requester_email, lr.contract_reference, lr.request_reason,
+ lr.requested_end, lr.status, lr.received_at, t.name AS tenant_name
+ FROM legal_requests lr
+ LEFT JOIN tenants t ON t.id = lr.tenant_id
+ WHERE lr.status <> 'processed'
+ ORDER BY lr.received_at ASC
+ LIMIT 100"
+)->fetchAll();
include 'header.php';
include 'headerline.php';
@@ -21,6 +31,31 @@ include 'nav.php';
Nur für Betreiber-Admins sichtbar: Übersicht aller Mandanten, unabhängig von deren eigener Mitgliedschaft.
Jeder Zugriff wird im Audit-Log des jeweiligen Mandanten protokolliert.
diff --git a/database/migrations/0029_legal_compliance.sql b/database/migrations/0029_legal_compliance.sql
new file mode 100644
index 0000000..ee89542
--- /dev/null
+++ b/database/migrations/0029_legal_compliance.sql
@@ -0,0 +1,63 @@
+ALTER TABLE tenants
+ ADD COLUMN customer_type VARCHAR(20) NOT NULL DEFAULT 'unknown' AFTER name,
+ ADD KEY idx_tenants_customer_type (customer_type);
+
+ALTER TABLE rate_limit_attempts
+ ADD KEY idx_rate_limit_attempts_created (created_at);
+
+ALTER TABLE audit_log
+ ADD KEY idx_audit_log_created (created_at);
+
+ALTER TABLE outbound_emails
+ ADD KEY idx_outbound_emails_created (created_at);
+
+CREATE TABLE legal_acceptances (
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
+ tenant_id INT NULL,
+ user_id INT NULL,
+ document_type VARCHAR(40) NOT NULL,
+ document_version VARCHAR(20) NOT NULL,
+ context VARCHAR(60) NOT NULL,
+ ip VARCHAR(45) NULL,
+ user_agent VARCHAR(500) NULL,
+ metadata_json TEXT NULL,
+ accepted_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ KEY idx_legal_acceptances_tenant (tenant_id, accepted_at),
+ KEY idx_legal_acceptances_user (user_id, accepted_at),
+ CONSTRAINT fk_legal_acceptances_tenant
+ FOREIGN KEY (tenant_id) REFERENCES tenants(id)
+ ON DELETE SET NULL,
+ CONSTRAINT fk_legal_acceptances_user
+ FOREIGN KEY (user_id) REFERENCES users(id)
+ ON DELETE SET NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+CREATE TABLE legal_requests (
+ id BIGINT AUTO_INCREMENT PRIMARY KEY,
+ reference_code VARCHAR(40) NOT NULL,
+ access_token_hash CHAR(64) NOT NULL,
+ request_type VARCHAR(30) NOT NULL,
+ tenant_id INT NULL,
+ user_id INT NULL,
+ requester_name VARCHAR(255) NOT NULL,
+ requester_email VARCHAR(255) NOT NULL,
+ contract_reference VARCHAR(255) NOT NULL,
+ request_reason TEXT NULL,
+ requested_end VARCHAR(40) NULL,
+ status VARCHAR(30) NOT NULL DEFAULT 'received',
+ ip VARCHAR(45) NULL,
+ user_agent VARCHAR(500) NULL,
+ metadata_json TEXT NULL,
+ received_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ processed_at DATETIME NULL,
+ UNIQUE KEY uq_legal_requests_reference (reference_code),
+ UNIQUE KEY uq_legal_requests_access_token (access_token_hash),
+ KEY idx_legal_requests_tenant (tenant_id, received_at),
+ KEY idx_legal_requests_type_status (request_type, status, received_at),
+ CONSTRAINT fk_legal_requests_tenant
+ FOREIGN KEY (tenant_id) REFERENCES tenants(id)
+ ON DELETE SET NULL,
+ CONSTRAINT fk_legal_requests_user
+ FOREIGN KEY (user_id) REFERENCES users(id)
+ ON DELETE SET NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
diff --git a/database/migrations/0030_contract_termination.sql b/database/migrations/0030_contract_termination.sql
new file mode 100644
index 0000000..cdd5df9
--- /dev/null
+++ b/database/migrations/0030_contract_termination.sql
@@ -0,0 +1,4 @@
+ALTER TABLE tenants
+ ADD COLUMN termination_requested_at DATETIME NULL AFTER customer_type,
+ ADD COLUMN contract_ends_at DATETIME NULL AFTER termination_requested_at,
+ ADD KEY idx_tenants_contract_end (contract_ends_at);
diff --git a/datenexport.php b/datenexport.php
index 0060118..b4f0388 100644
--- a/datenexport.php
+++ b/datenexport.php
@@ -44,9 +44,10 @@ include 'nav.php';
Datenexport
Lädt alle für gespeicherten Daten als
- JSON-Datei herunter: Mitglieder, Zugänge und Rollen, alle Buchungen, Hinweise,
- CSV-Importe, Mail-Versandlog und das Admin-Protokoll. Passwörter werden nicht
- exportiert.
+ JSON-Datei herunter: Einstellungen und Logos, Mitglieder, Zugänge und Rollen,
+ alle Buchungen, PayPal-Zuordnungen, Hinweise und FAQ, CSV-Importe, Tarif- und
+ Funktionsstatus, Rechtstextnachweise, Mail-Versandlog und Admin-Protokoll.
+ Passwörter, Token-Hashes und Stripe-Schlüssel werden nicht exportiert.
Die Vertragsbestätigung konnte nicht per E-Mail versendet werden. Bitte speichere jetzt die AGB, den AVV und bei privater Nutzung die Widerrufsbelehrung. Falls der Fehler bleibt, nutze bitte das Ticketsystem.
+
+
+
+
+
Die Verifizierungs-E-Mail konnte nicht versendet werden. Bitte versuche den Versand unten erneut oder nutze das Ticketsystem.
Wir haben die Eingangsbestätigung sofort an gesendet.
+
+
+
Die Kündigung wurde gespeichert, aber die E-Mail-Bestätigung konnte nicht versendet werden. Bitte speichere die Bestätigung jetzt über den folgenden Link und kontaktiere uns bei Bedarf über das Ticketsystem.
Hier kannst du einen kostenlosen oder kostenpflichtigen Kaffeeliste-Vertrag ordentlich oder außerordentlich kündigen. Eine Anmeldung ist nicht erforderlich.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/landing.php b/landing.php
index 855e1da..a508b04 100644
--- a/landing.php
+++ b/landing.php
@@ -283,7 +283,11 @@ $jsonFlags = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE;
ImpressumAGBDatenschutz
+ AVV
+ Widerrufsbelehrung
+ Vertrag widerrufenPreise
+ Verträge hier kündigen
diff --git a/legal/agb-2026-08-22.txt b/legal/agb-2026-08-22.txt
new file mode 100644
index 0000000..4ca8978
--- /dev/null
+++ b/legal/agb-2026-08-22.txt
@@ -0,0 +1,89 @@
+## 1. Anbieter, Geltungsbereich und Begriffe
+
+Diese Allgemeinen Geschäftsbedingungen gelten für die Nutzung der webbasierten Anwendung „Kaffeeliste“ durch Unternehmer im Sinne des § 14 BGB und durch Verbraucher im Sinne des § 13 BGB.
+
+Anbieter ist Clemens Creutzburg, CTB-IT, In den Sieben Stücken 9d, 30655 Hannover, E-Mail: info@ctb-it.de. Weitere Kontaktmöglichkeiten stehen im [Impressum](impressum.php).
+
+„Kunde“ ist die Person, die einen Kundenbereich (Mandanten) registriert. „Teilnehmer“ sind Personen, deren Kaffee- oder Getränkebuchungen der Kunde innerhalb dieses Bereichs verwaltet.
+
+## 2. Vertragsschluss und Vertragstext
+
+Der kostenlose Nutzungsvertrag kommt zustande, wenn der Kunde das Registrierungsformular vollständig absendet, diese AGB akzeptiert und der Anbieter den Kundenbereich freischaltet. Der Kunde kann Eingabefehler vor dem Absenden über die üblichen Formularfunktionen berichtigen. Vertragssprache ist Deutsch.
+
+Ein kostenpflichtiges Abonnement kommt erst zustande, wenn der Kunde nach Anzeige des Tarifs, des monatlichen Gesamtpreises, der Laufzeit und der Kündigungsbedingungen den Bestellvorgang beim Zahlungsdienstleister Stripe mit einer eindeutig auf die Zahlungspflicht hinweisenden Schaltfläche abschließt und die Buchung bestätigt wird. Bis dahin kann der Vorgang abgebrochen oder berichtigt werden.
+
+Der Anbieter protokolliert die angenommenen Versionen der Rechtstexte und übersendet dem Kunden eine Vertragsbestätigung in Textform. Der Kunde kann die aktuellen Texte außerdem jederzeit herunterladen oder ausdrucken.
+
+## 3. Leistungen und technische Voraussetzungen
+
+Der Anbieter stellt eine mandantenfähige Webanwendung zur Verwaltung einer internen Kaffee- oder Getränkekasse bereit. Zum Kern gehören die Verwaltung von Teilnehmern und Rollen, die Erfassung von Verbrauch und Einzahlungen, die Berechnung von Salden sowie die im gebuchten Tarif ausgewiesenen Export- und Verwaltungsfunktionen.
+
+Erforderlich sind ein aktueller Browser, eine Internetverbindung und eine erreichbare E-Mail-Adresse. Die Anwendung ist für die Nutzung im Browser vorgesehen. Ein Anspruch auf eine mobile App, bestimmte Schnittstellen oder Funktionen außerhalb der veröffentlichten Leistungsbeschreibung besteht nicht.
+
+Der Anbieter darf die Anwendung aktualisieren und sicherheitsbedingt ändern. Bei Verbraucherverträgen über digitale Produkte bleiben die gesetzlichen Aktualisierungs-, Bereitstellungs- und Mängelrechte, insbesondere nach §§ 327 ff. BGB, unberührt. Wesentliche, vertraglich geschuldete Funktionen werden nicht ohne sachlichen Grund entzogen.
+
+## 4. Tarife, Preise und Zahlung
+
+Tarifgrenzen und monatliche Endpreise stehen auf der Seite [Preise](preise.php). Wegen Anwendung der Kleinunternehmerregelung nach § 19 UStG wird keine Umsatzsteuer ausgewiesen. Es fallen keine Versandkosten an.
+
+Kostenpflichtige Tarife werden monatlich im Voraus über Stripe abgerechnet. Eine automatische Hochstufung allein wegen einer höheren Teilnehmerzahl findet nicht statt. Ist die Grenze des gebuchten Tarifs erreicht, können keine weiteren aktiven Teilnehmer angelegt oder reaktiviert werden, bis der Kunde selbst einen passenden Tarif bucht oder Teilnehmer deaktiviert.
+
+Ein Wechsel zwischen kostenpflichtigen Tarifen schaltet die neue Teilnehmergrenze sofort frei. Für die bereits laufende, bezahlte Abrechnungsperiode erfolgt weder eine zusätzliche zeitanteilige Belastung noch eine Gutschrift; der neue volle Monatspreis gilt ab der nächsten Verlängerung. Ein Wechsel in den kostenlosen Tarif ist eine Kündigung des kostenpflichtigen Abonnements zum Ende des laufenden Abrechnungszeitraums.
+
+Gerät der Kunde in Zahlungsverzug, darf der Anbieter kostenpflichtige Zusatzfunktionen nach vorherigem Hinweis vorübergehend sperren. Gesetzliche Rechte bleiben unberührt.
+
+## 5. Pflichten des Kunden
+
+Der Kunde macht richtige Angaben, hält seine E-Mail-Adresse aktuell, schützt Zugangsdaten und informiert den Anbieter unverzüglich über vermuteten Missbrauch. Inhalte und Daten dürfen nicht rechtswidrig sein, Rechte Dritter verletzen, Schadsoftware enthalten oder den Dienst übermäßig belasten.
+
+Wer Daten anderer Personen verwaltet, stellt eine hierfür erforderliche Rechtsgrundlage und Information der Betroffenen sicher. Soweit der Kunde Verantwortlicher im Sinne der DSGVO ist und der Anbieter in seinem Auftrag verarbeitet, gilt der elektronisch vereinbarte [Auftragsverarbeitungsvertrag](avv.php). Für ausschließlich persönliche oder familiäre Tätigkeiten kann die Haushaltsausnahme nach Art. 2 Abs. 2 lit. c DSGVO gelten.
+
+## 6. Verfügbarkeit, Wartung und Support
+
+Der Anbieter betreibt den Dienst mit der im Verkehr üblichen Sorgfalt. Ohne gesonderte Service-Level-Vereinbarung wird keine bestimmte prozentuale Verfügbarkeit garantiert. Vorhersehbare Wartungen werden möglichst zu nutzungsarmen Zeiten vorgenommen. Kurzzeitige Einschränkungen durch Wartung, Sicherheitsmaßnahmen oder Ereignisse außerhalb des Einflussbereichs des Anbieters sind möglich.
+
+Supportanfragen können per E-Mail oder über das im Impressum verlinkte Ticketsystem gestellt werden. Gesetzliche Mängelrechte werden dadurch nicht eingeschränkt.
+
+## 7. Laufzeit und Kündigung
+
+Der kostenlose Vertrag läuft auf unbestimmte Zeit und kann jederzeit ohne Frist gekündigt werden. Kostenpflichtige Abonnements laufen ebenfalls auf unbestimmte Zeit, haben eine monatliche Abrechnungsperiode und können jederzeit zum Ende der laufenden Abrechnungsperiode gekündigt werden. Es gibt keine darüber hinausgehende Mindestlaufzeit.
+
+Verbraucher können die ständig erreichbare Funktion [Verträge hier kündigen](kuendigen.php) verwenden. Eine Kündigung in Textform per E-Mail ist ebenfalls möglich. Das Recht zur außerordentlichen Kündigung aus wichtigem Grund bleibt bestehen. Der Anbieter kann ordentlich mit einer Frist von einem Monat zum Ende der laufenden Abrechnungsperiode kündigen; bei kostenlosen Verträgen mit einer Frist von einem Monat.
+
+Der Kunde sollte seinen Datenexport vor dem Vertragsende herunterladen. Nach Vertragsende wird der Zugang gesperrt; die operativen Mandantendaten werden 30 Tage später gelöscht. Eine vom Kunden im Konto ausdrücklich ausgelöste Mandantenlöschung wirkt sofort und ist nicht rückgängig zu machen. Abrechnungsunterlagen, Vertragsnachweise und offene Rechtsfälle werden nur im gesetzlich erforderlichen Umfang getrennt weiter aufbewahrt.
+
+## 8. Widerrufsrecht für Verbraucher
+
+Verbrauchern steht bei Fernabsatzverträgen grundsätzlich ein vierzehntägiges Widerrufsrecht zu. Einzelheiten, Musterformular und die elektronische Widerrufsfunktion stehen unter [Widerruf](widerruf.php). Verlangt ein Verbraucher ausdrücklich, dass eine kostenpflichtige Leistung vor Ablauf der Widerrufsfrist beginnt, kann er bei einem Widerruf Wertersatz für die bis dahin erbrachte Leistung schulden. Das Widerrufsrecht erlischt bei einer laufenden Dienstleistung nicht bereits durch den bloßen Leistungsbeginn.
+
+## 9. Mängelrechte
+
+Es gelten die gesetzlichen Mängelrechte. Verbraucher haben bei digitalen Produkten insbesondere Anspruch auf vertragsgemäße Bereitstellung und erforderliche Aktualisierungen sowie bei Mängeln die gesetzlichen Rechte auf Nacherfüllung, Vertragsbeendigung, Minderung und gegebenenfalls Schadensersatz. Garantien werden nur übernommen, wenn sie ausdrücklich als solche bezeichnet sind.
+
+## 10. Haftung
+
+Der Anbieter haftet unbeschränkt bei Vorsatz und grober Fahrlässigkeit, bei Schäden aus der Verletzung des Lebens, des Körpers oder der Gesundheit, nach dem Produkthaftungsgesetz, bei arglistigem Verschweigen eines Mangels und im Umfang einer ausdrücklich übernommenen Garantie.
+
+Bei leicht fahrlässiger Verletzung einer wesentlichen Vertragspflicht ist die Haftung auf den bei Vertragsschluss typischerweise vorhersehbaren Schaden begrenzt. Wesentliche Vertragspflichten sind solche, deren Erfüllung die ordnungsgemäße Durchführung des Vertrags erst ermöglicht und auf deren Einhaltung der Kunde regelmäßig vertrauen darf. Im Übrigen ist die Haftung für leichte Fahrlässigkeit ausgeschlossen, soweit dies gesetzlich zulässig ist.
+
+Die vorstehenden Begrenzungen gelten entsprechend zugunsten der Beschäftigten und Erfüllungsgehilfen des Anbieters. Zwingende Verbraucherrechte und Ansprüche nach den Vorschriften über digitale Produkte bleiben unberührt.
+
+## 11. Änderungen dieser Bedingungen und der Leistung
+
+Änderungen dieser AGB für bestehende Verträge erfolgen nur aus einem sachlichen Grund, insbesondere wegen einer Rechtsänderung, Sicherheitsanforderung oder einer notwendigen technischen Weiterentwicklung, und nur soweit das Verhältnis von Leistung und Gegenleistung nicht unangemessen zulasten des Kunden verschoben wird. Der Anbieter teilt Änderungen mindestens sechs Wochen vor ihrem Wirksamwerden in Textform mit.
+
+Eine Änderung, die Hauptleistung, Preis oder wesentliche Verbraucherrechte betrifft, wird nur mit ausdrücklicher Zustimmung wirksam. Stimmt der Kunde einer notwendigen Änderung nicht zu, dürfen beide Seiten den Vertrag nach den bisherigen Bedingungen ordentlich beenden.
+
+## 12. Verbraucherstreitbeilegung
+
+Der Anbieter ist nicht verpflichtet und derzeit nicht bereit, an einem Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen. Unabhängig davon können Beschwerden über die Kontaktwege im Impressum eingereicht werden.
+
+## 13. Schlussbestimmungen
+
+Es gilt deutsches Recht. Bei Verbrauchern gilt diese Rechtswahl nur, soweit dadurch zwingender Schutz des Staates ihres gewöhnlichen Aufenthalts nicht entzogen wird. Das UN-Kaufrecht ist ausgeschlossen.
+
+Ausschließlicher Gerichtsstand Hannover wird nur vereinbart, wenn der Kunde Kaufmann, juristische Person des öffentlichen Rechts oder öffentlich-rechtliches Sondervermögen ist oder keinen allgemeinen Gerichtsstand in Deutschland hat und die Vereinbarung gesetzlich zulässig ist. Im Übrigen gelten die gesetzlichen Gerichtsstände.
+
+Sollte eine Regelung unwirksam sein, gelten an ihrer Stelle die gesetzlichen Vorschriften; der übrige Vertrag bleibt bestehen.
+
+Stand: 22. August 2026
diff --git a/legal/avv-2026-08-22.txt b/legal/avv-2026-08-22.txt
new file mode 100644
index 0000000..70e0eaa
--- /dev/null
+++ b/legal/avv-2026-08-22.txt
@@ -0,0 +1,84 @@
+## Vertrag über Auftragsverarbeitung nach Art. 28 DSGVO
+
+zwischen dem im Kundenkonto bezeichneten Kunden („Verantwortlicher“) und Clemens Creutzburg, CTB-IT, In den Sieben Stücken 9d, 30655 Hannover („Auftragsverarbeiter“).
+
+Diese Vereinbarung gilt, soweit der Kunde personenbezogene Daten anderer Personen in der Kaffeeliste in eigener Verantwortlichkeit verarbeitet. Bei einer ausschließlich persönlichen oder familiären Tätigkeit kann die Haushaltsausnahme nach Art. 2 Abs. 2 lit. c DSGVO gelten; die nachfolgenden Schutz- und Vertraulichkeitspflichten gelten vertraglich dennoch.
+
+## 1. Gegenstand, Dauer, Art und Zweck
+
+Gegenstand ist der Betrieb der webbasierten Kaffeeliste nach dem Hauptvertrag. Die Verarbeitung beginnt mit Anlage von Daten anderer Personen und dauert bis zu deren Löschung oder dem Ende des Hauptvertrags. Sie umfasst Erheben, Erfassen, Ordnen, Speichern, Auslesen, Abfragen, Berechnen, Übermitteln an vom Kunden bestimmte Empfänger, Einschränken, Anonymisieren und Löschen.
+
+Zweck ist die Verwaltung einer internen Kaffee- oder Getränkekasse, insbesondere von Teilnehmern, Verbrauchsbuchungen, Einzahlungen, Salden, Benachrichtigungen und Exporten.
+
+## 2. Datenarten und betroffene Personen
+
+- Stammdaten: Name, Anzeigename, optional E-Mail-Adresse und PayPal-Anzeigename
+- Nutzungs- und Buchungsdaten: Verbrauch, Einzahlungen, Salden, Zeitpunkte, Bemerkungen und Zuordnungen
+- Kommunikationsdaten: Empfänger, Betreff, Versandstatus und Fehlermeldungen von Benachrichtigungen
+- Zugangs- und Protokolldaten: Rollen, technische Kennungen und sicherheitsrelevante Aktionen
+- Betroffene: Teilnehmer, Beschäftigte, Vereinsmitglieder, Familien- oder Gruppenmitglieder sowie vom Kunden berechtigte Nutzer
+
+Besondere Kategorien personenbezogener Daten nach Art. 9 DSGVO sind nicht vorgesehen. Der Kunde weist den Auftragsverarbeiter nicht an, solche Daten einzugeben.
+
+## 3. Weisungen
+
+Der Auftragsverarbeiter verarbeitet die Daten nur auf dokumentierte Weisung des Verantwortlichen, soweit keine gesetzliche Verpflichtung eine andere Verarbeitung verlangt. Der Hauptvertrag, die Einstellungen und die Nutzung der vorgesehenen Funktionen gelten als dokumentierte Weisungen. Weitergehende Weisungen können in Textform über die Kontaktwege im Impressum erteilt werden.
+
+Hält der Auftragsverarbeiter eine Weisung für datenschutzwidrig, informiert er den Verantwortlichen unverzüglich und darf die Ausführung bis zur Klärung aussetzen. Zusätzlicher Aufwand außerhalb des vereinbarten Leistungsumfangs kann nach vorheriger Vereinbarung berechnet werden.
+
+## 4. Vertraulichkeit und Personal
+
+Der Auftragsverarbeiter setzt nur Personen ein, die zur Vertraulichkeit verpflichtet und angemessen über Datenschutz und Informationssicherheit unterwiesen wurden. Zugriffe werden auf das zur Aufgabenerfüllung erforderliche Maß beschränkt.
+
+## 5. Technische und organisatorische Maßnahmen
+
+- verschlüsselte Übertragung über TLS und HSTS auf der Produktivdomain
+- Passwörter nur als zeitgemäße, gesalzene Hashwerte; geheime Schlüssel außerhalb des Quellcodes
+- rollen- und mandantenbezogene serverseitige Zugriffskontrollen nach dem Minimalprinzip
+- Sitzungs-Cookies mit HttpOnly, Secure bei HTTPS und SameSite; CSRF-Schutz bei schreibenden Vorgängen
+- Begrenzung automatisierter Anmelde- und Rücksetzversuche sowie Protokollierung sicherheitsrelevanter Administrationsvorgänge
+- getrennte Mandantenkennungen, Fremdschlüssel und automatisierte Isolationstests
+- regelmäßige Sicherheitsaktualisierungen, eingeschränkte Administrationszugänge und gesicherte Betriebszugänge
+- regelmäßige verschlüsselte oder zugriffsgeschützte Datensicherungen nach dem dokumentierten Backupkonzept sowie Wiederherstellungstests
+- Lösch-, Export- und Bereinigungskonzepte für Mandantendaten, Protokolle und temporäre Daten
+- Verfahren zur Behandlung von Sicherheitsvorfällen und zur Bewertung meldepflichtiger Datenschutzverletzungen
+
+Der Verantwortliche prüft diese Maßnahmen im Hinblick auf sein Risiko und informiert den Auftragsverarbeiter vor Vertragsbeginn, wenn ergänzende Maßnahmen erforderlich sind. Änderungen bleiben zulässig, sofern das Schutzniveau nicht unterschritten wird.
+
+## 6. Unterauftragsverarbeiter
+
+Der Verantwortliche erteilt die allgemeine Genehmigung zum Einsatz folgender Unterauftragsverarbeiter:
+
+- netcup GmbH, Emmy-Noether-Straße 10, 76131 Karlsruhe, Deutschland – Rechenzentrum, Hosting, Speicher, Backup-Infrastruktur und Mailtransport; Verarbeitungsort Deutschland beziehungsweise Europäische Union
+
+Stripe und das interne Abrechnungssystem Dolibarr erhalten grundsätzlich nur Vertrags-, Rechnungs- und Zahlungsdaten des Kunden, nicht die im Auftrag verwalteten Teilnehmer- und Kasseninhalte. Soweit im Einzelfall doch Auftragsdaten an einen weiteren Dienst übermittelt werden sollen, wird dieser vorab als Unterauftragsverarbeiter einbezogen.
+
+Über beabsichtigte Änderungen der Unterauftragsverarbeiter informiert der Auftragsverarbeiter mindestens 30 Tage vorher in Textform. Der Verantwortliche kann aus wichtigem datenschutzrechtlichem Grund widersprechen. Ist keine zumutbare Alternative möglich, kann jede Partei den betroffenen Dienst zum Änderungszeitpunkt kündigen.
+
+Der Auftragsverarbeiter verpflichtet Unterauftragsverarbeiter nach Art. 28 Abs. 4 DSGVO mindestens zu gleichwertigen Pflichten und bleibt gegenüber dem Verantwortlichen für deren Erfüllung verantwortlich.
+
+## 7. Unterstützung des Verantwortlichen
+
+Der Auftragsverarbeiter unterstützt den Verantwortlichen unter Berücksichtigung der Art der Verarbeitung angemessen bei Betroffenenanfragen, Datenschutz-Folgenabschätzungen, Konsultationen mit Aufsichtsbehörden und bei der Erfüllung der Pflichten aus Art. 32 bis 36 DSGVO. Geht eine Betroffenenanfrage unmittelbar ein, leitet er sie ohne eigene inhaltliche Entscheidung an den Verantwortlichen weiter, soweit der Anbieter nicht für eigene Datenverarbeitungen selbst verantwortlich ist.
+
+## 8. Datenschutzverletzungen
+
+Der Auftragsverarbeiter informiert den Verantwortlichen unverzüglich, nachdem ihm eine Verletzung des Schutzes von Auftragsdaten bekannt wurde. Die Meldung enthält, soweit verfügbar, Art und Umfang des Vorfalls, betroffene Daten und Personen, wahrscheinliche Folgen, ergriffene oder vorgeschlagene Maßnahmen sowie einen Kontaktpunkt. Fehlende Angaben werden nachgereicht.
+
+## 9. Nachweise und Kontrollen
+
+Der Auftragsverarbeiter stellt die zur Darlegung der Einhaltung von Art. 28 DSGVO erforderlichen Informationen bereit. Der Verantwortliche darf nach angemessener Vorankündigung und unter Wahrung der Sicherheit und Vertraulichkeit selbst oder durch einen zur Verschwiegenheit verpflichteten Prüfer kontrollieren. Vorrangig werden aktuelle Dokumentationen und geeignete Nachweise genutzt. Vor-Ort-Prüfungen erfolgen bei berechtigtem Anlass und während üblicher Geschäftszeiten; vermeidbarer Zusatzaufwand kann nach vorheriger Vereinbarung berechnet werden. Rechte der Aufsichtsbehörden bleiben unberührt.
+
+## 10. Rückgabe und Löschung
+
+Der Verantwortliche kann die Auftragsdaten vor Vertragsende über die Exportfunktion abrufen. Nach Vertragsende sperrt der Auftragsverarbeiter den Zugang und löscht die operativen Auftragsdaten spätestens nach 30 Tagen, sofern keine gesetzliche Aufbewahrungspflicht entgegensteht. Eine ausdrücklich ausgelöste Mandantenlöschung wirkt sofort. In turnusmäßig überschriebenen Sicherungen können Daten danach noch bis zu 14 Tage enthalten; sie werden nicht erneut produktiv verwendet und bei einer Wiederherstellung erneut dem Löschlauf unterzogen.
+
+Abrechnungs- und Vertragsdaten, die der Anbieter in eigener Verantwortlichkeit aufbewahren muss, sind nicht Gegenstand der Löschung nach diesem Abschnitt.
+
+## 11. Verantwortungsbereiche und Schlussbestimmungen
+
+Der Verantwortliche ist für Zulässigkeit, Transparenz, Datenrichtigkeit, Rechtsgrundlagen, Betroffenenrechte und seine Nutzerberechtigungen verantwortlich. Der Auftragsverarbeiter ist für die vertragsgemäße, sichere Verarbeitung im Auftrag verantwortlich.
+
+Im Übrigen gelten Hauptvertrag und AGB. Bei Widersprüchen zu Datenschutzpflichten geht dieser AVV vor. Änderungen bedürfen der Textform. Die elektronische Annahme wird mit Version, Zeit, Nutzer und technischen Nachweisdaten protokolliert.
+
+Stand: 22. August 2026
diff --git a/legal/datenschutz-2026-08-22.txt b/legal/datenschutz-2026-08-22.txt
new file mode 100644
index 0000000..2b9ed21
--- /dev/null
+++ b/legal/datenschutz-2026-08-22.txt
@@ -0,0 +1,89 @@
+## 1. Verantwortlicher und Kontakt
+
+Verantwortlich für die eigenen Verarbeitungen des Kaffeeliste-Dienstes ist Clemens Creutzburg, CTB-IT, In den Sieben Stücken 9d, 30655 Hannover, E-Mail: info@ctb-it.de. Telefonnummer und Ticketsystem stehen im [Impressum](impressum.php). Ein Datenschutzbeauftragter ist derzeit nicht bestellt, weil keine gesetzliche Bestellpflicht festgestellt wurde.
+
+## 2. Unsere Rollen
+
+Für Registrierung, Kundenkonto, Vertragsabwicklung, Abrechnung, Support, Sicherheit und den Betrieb der öffentlichen Website ist CTB-IT Verantwortlicher.
+
+Verwaltet ein Kunde Daten anderer Personen innerhalb seines Mandanten, ist grundsätzlich der Kunde Verantwortlicher und CTB-IT Auftragsverarbeiter. Dies regelt der [AVV](avv.php). Bei ausschließlich persönlichen oder familiären Tätigkeiten eines privaten Kunden kann die Haushaltsausnahme nach Art. 2 Abs. 2 lit. c DSGVO gelten. CTB-IT schützt die Daten technisch und vertraglich unabhängig davon.
+
+## 3. Website, Serverprotokolle und Sicherheit
+
+Beim Aufruf werden technisch erforderliche Verbindungsdaten verarbeitet: IP-Adresse, Datum und Uhrzeit, angeforderte Adresse, übertragene Datenmenge, Referrer, Browser, Betriebssystem und HTTP-Status. Zweck sind sichere Auslieferung, Fehleranalyse und Abwehr von Angriffen. Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO; das berechtigte Interesse ist ein sicherer und stabiler Dienst.
+
+Anwendungsseitige IP-Daten aus der Begrenzung automatisierter Versuche werden spätestens nach 24 Stunden gelöscht. Webserver-Protokolle sollen im Produktivbetrieb nach spätestens sieben Tagen gelöscht oder anonymisiert werden, sofern ein Sicherheitsvorfall keine längere, zweckgebundene Sicherung erfordert.
+
+## 4. Registrierung und Kundenkonto
+
+Wir verarbeiten Kundenname und -kürzel, Kundentyp, Name, E-Mail-Adresse, Passwort-Hash, E-Mail-Bestätigung, Rollen, Anmeldezeitpunkte, Vertrags- und Rechtstextversionen, Zeitpunkt der Annahme, IP-Adresse und User-Agent. Zwecke sind Vertragsschluss, Authentifizierung, Berechtigungen, Vertragsnachweis und Kommunikation. Rechtsgrundlagen sind Art. 6 Abs. 1 lit. b DSGVO sowie für Sicherheits- und Nachweisdaten Art. 6 Abs. 1 lit. f DSGVO. Pflichtfelder sind für Vertragsschluss und sichere Kontoführung erforderlich; ohne sie ist keine Registrierung möglich.
+
+Ein Klartextpasswort wird nicht gespeichert. Die Kenntnisnahme der Datenschutzerklärung ist keine Einwilligung in Werbung oder Tracking.
+
+## 5. Mandanten-, Teilnehmer- und Kassendaten
+
+Je nach Nutzung werden Einstellungen, Marken- und Zahlungsangaben des Kunden, Teilnehmername, E-Mail-Adresse, PayPal-Anzeigename und -E-Mail, Nutzerzuordnung, Rollen, Aktivstatus, Verbrauch, Einzahlungen, Salden, Bemerkungen, Hinweise, FAQ-Inhalte, Importe, Benachrichtigungsstatus und Administrationsprotokolle verarbeitet.
+
+Bei Auftragsverarbeitung bestimmt der Kunde Zwecke, Rechtsgrundlagen, Inhalte und Empfänger. Die Daten stammen vom Kunden, seinen Administratoren, den Teilnehmern oder aus vom Kunden veranlassten Importen. Teilnehmer sollten sich für Auskunft, Berichtigung oder Löschung zuerst an den jeweiligen Kunden wenden; CTB-IT unterstützt diesen nach dem AVV.
+
+## 6. Vertrag, Abrechnung, Stripe und Dolibarr
+
+Bei kostenpflichtigen Tarifen verarbeiten wir Tarif, Teilnehmerzahl, Abrechnungsstatus, Stripe-Kunden- und Abonnementkennung, Laufzeit, Rechnungsbetrag und Zahlungsstatus zur Vertragsdurchführung nach Art. 6 Abs. 1 lit. b DSGVO und für Buchführung und Steuerrecht nach Art. 6 Abs. 1 lit. c DSGVO.
+
+Zahlungen werden durch Stripe Payments Europe, Limited, 1 Grand Canal Street Lower, Grand Canal Dock, Dublin, Irland, abgewickelt. Stripe erhält insbesondere Kontakt-, Vertrags-, Geräte- und Zahlungsdaten. Stripe verarbeitet einen Teil als unser Auftragsverarbeiter und einen Teil in eigener Verantwortlichkeit, etwa zur Betrugsprävention und Erfüllung finanzrechtlicher Pflichten. Übermittlungen in die USA oder andere Drittländer können auf Angemessenheitsbeschlüssen, insbesondere dem EU-US Data Privacy Framework für zertifizierte Empfänger, oder EU-Standardvertragsklauseln beruhen. Weitere Informationen: [Stripe-Datenschutz](https://stripe.com/de/privacy).
+
+Bezahlte Rechnungen werden im selbst betriebenen Dolibarr-System unter verwaltung.ctb-it.de für Buchführung und Kundenverwaltung gespiegelt. Dabei werden Kunden-, Vertrags-, Rechnungs- und Zahlungsdaten verarbeitet, aber grundsätzlich keine Teilnehmer- oder Kasseninhalte.
+
+## 7. PayPal-Zahlungsmails
+
+Aktiviert ein Kunde die PayPal-Zuordnung, werden an die mandantenspezifische Zahlungsadresse weitergeleitete PayPal-Benachrichtigungen automatisiert ausgelesen. Verarbeitet werden unter anderem Absender- und Empfängeradresse, PayPal-Transaktionskennung, Name und E-Mail des Zahlers, Betrag, Währung, Zahlungszeit und Zuordnungsstatus. Zweck ist die vom Kunden gewünschte Zuordnung zu Teilnehmern und Einzahlungen. Bei Teilnehmerdaten erfolgt dies im Auftrag des Kunden; für die Bereitstellung und Sicherheit der Funktion zusätzlich auf Art. 6 Abs. 1 lit. b und f DSGVO.
+
+PayPal selbst verarbeitet Daten in eigener Verantwortlichkeit nach den dortigen Datenschutzinformationen. Die Kaffeeliste ruft keine PayPal-Kontodaten des Kunden über eine PayPal-API ab.
+
+## 8. E-Mail, Support und Ticketsystem
+
+Wir senden notwendige E-Mails zur Verifizierung, Anmeldung, Passwortzurücksetzung, Einladung, Vertragsbestätigung, Kündigung, Widerruf und zu vom Kunden aktivierten Kassenbenachrichtigungen. Verarbeitet werden Empfänger, Betreff, Status, Zeitpunkt und gegebenenfalls Fehler. Grundlage sind Art. 6 Abs. 1 lit. b DSGVO beziehungsweise bei Teilnehmernachrichten der Auftrag des Kunden. Versandprotokolle werden regelmäßig nach 180 Tagen gelöscht, soweit sie nicht als Vertragsnachweis länger erforderlich sind.
+
+Bei Kontakt per E-Mail oder über ticketsystem.ctb-it.de verarbeiten wir die übermittelten Kontaktdaten, Inhalte, Anhänge, Zeitpunkte und technischen Protokolldaten, um die Anfrage zu bearbeiten. Rechtsgrundlage ist Art. 6 Abs. 1 lit. b DSGVO bei vorvertraglichen oder vertraglichen Anliegen, sonst Art. 6 Abs. 1 lit. f DSGVO. Unser Interesse ist nachvollziehbarer und sicherer Support. Bitte übermitteln Sie im Ticket keine unnötigen besonderen Kategorien personenbezogener Daten.
+
+## 9. Hosting, Empfänger und Auftragsverarbeiter
+
+Die Anwendung, Datenbank, Sitzungen, Sicherungen und der Mailtransport werden auf Infrastruktur der netcup GmbH, Emmy-Noether-Straße 10, 76131 Karlsruhe, Deutschland, innerhalb Deutschlands beziehungsweise der Europäischen Union betrieben. Mit netcup besteht ein Vertrag über Auftragsverarbeitung.
+
+Weitere Empfänger sind Stripe für Zahlung und Abrechnung, Behörden oder Berater bei gesetzlicher Pflicht beziehungsweise Rechtsverteidigung und die vom Kunden bestimmten Nutzer und Empfänger. Eine Weitergabe für fremde Werbung findet nicht statt.
+
+## 10. Cookies und externe Inhalte
+
+Die Anwendung setzt ausschließlich das Sitzungs-Cookie „kaffeeliste_session“. Es ist für Login, Mandantenzuordnung, Sicherheit und CSRF-Schutz erforderlich, enthält eine zufällige Sitzungskennung, ist für JavaScript nicht lesbar und wird beim Schließen des Browsers beendet. Grundlage für den Zugriff auf das Endgerät ist § 25 Abs. 2 Nr. 2 TDDDG; die anschließende Verarbeitung beruht auf Art. 6 Abs. 1 lit. b und f DSGVO.
+
+Es gibt keine Analyse-, Werbe- oder Social-Media-Cookies. Schriften und Gestaltungselemente werden lokal ausgeliefert; beim bloßen Seitenaufruf wird keine Verbindung zu Google Fonts hergestellt.
+
+## 11. Speicherdauer und Löschung
+
+- Kundenkonto und operative Mandantendaten: für die Vertragsdauer; bei einer ausdrücklich ausgelösten Mandantenlöschung sofort aus dem Produktivsystem, sonst 30 Tage nach Vertragsende
+- technische Rate-Limit-Daten: höchstens 24 Stunden
+- Admin- und Sicherheitsprotokoll: regelmäßig 180 Tage; bei einem konkreten Vorfall bis zu dessen Abschluss und Ablauf einschlägiger Verjährungsfristen
+- E-Mail-Versandprotokoll: regelmäßig 180 Tage
+- Vertragsannahmen, Kündigungen, Widerrufe und erforderliche Korrespondenz: regelmäßig bis zum Ablauf der zivilrechtlichen Verjährung, grundsätzlich drei Jahre ab Ende des Jahres, bei Rechtsstreit länger
+- Rechnungen, Zahlungs- und Buchungsbelege des Anbieters: acht Jahre oder eine andere gesetzlich vorgeschriebene Dauer nach § 257 HGB und § 147 AO
+- Sicherungskopien: rollierend bis zu 14 Tage; danach Überschreibung. Bei Wiederherstellung werden zuvor fällige Löschungen erneut ausgeführt.
+
+Interne Kaffee- oder Getränkebuchungen des Kunden werden nicht pauschal als steuerliche Belege des Anbieters behandelt. Der Kunde bestimmt im Rahmen seiner Verantwortung eigene Aufbewahrungsfristen und kann den Mandanten löschen. Gesetzlich aufzubewahrende Abrechnungsdaten des Anbieters bleiben getrennt erhalten.
+
+## 12. Ihre Rechte
+
+Soweit CTB-IT Verantwortlicher ist, bestehen nach den gesetzlichen Voraussetzungen Rechte auf Auskunft, Berichtigung, Löschung, Einschränkung, Datenübertragbarkeit und Widerspruch. Eine erteilte Einwilligung kann jederzeit für die Zukunft widerrufen werden; derzeit stützt der Dienst keine Werbung oder Analyse auf eine Einwilligung.
+
+Gegen Verarbeitungen nach Art. 6 Abs. 1 lit. f DSGVO können Sie aus Gründen Ihrer besonderen Situation widersprechen. Bei Direktwerbung wäre ein Widerspruch jederzeit ohne Begründung möglich; Direktwerbung ist derzeit nicht vorgesehen.
+
+Anfragen richten Sie an info@ctb-it.de oder über das Ticketsystem im Impressum. Sie können sich außerdem bei einer Datenschutzaufsichtsbehörde beschweren. Für den Anbieter ist insbesondere die Landesbeauftragte für den Datenschutz Niedersachsen, Prinzenstraße 5, 30159 Hannover, zuständig.
+
+## 13. Automatisierte Entscheidungen
+
+Es findet keine ausschließlich automatisierte Entscheidungsfindung einschließlich Profiling statt, die rechtliche Wirkung entfaltet oder Sie ähnlich erheblich beeinträchtigt. Sicherheitslimits können Anfragen kurzfristig technisch blockieren; eine Vertragsentscheidung wird damit nicht getroffen.
+
+## 14. Änderungen
+
+Wir aktualisieren diese Erklärung, wenn sich Verarbeitung oder Rechtslage ändern. Bei wesentlichen Änderungen für bestehende Kunden informieren wir über einen geeigneten Kontaktweg.
+
+Stand: 22. August 2026
diff --git a/legal/widerruf-2026-08-22.txt b/legal/widerruf-2026-08-22.txt
new file mode 100644
index 0000000..c20a3a2
--- /dev/null
+++ b/legal/widerruf-2026-08-22.txt
@@ -0,0 +1,32 @@
+## Widerrufsbelehrung für Verbraucher
+
+### Widerrufsrecht
+
+Sie haben das Recht, binnen vierzehn Tagen ohne Angabe von Gründen diesen Vertrag zu widerrufen.
+
+Die Widerrufsfrist beträgt vierzehn Tage ab dem Tag des Vertragsabschlusses.
+
+Um Ihr Widerrufsrecht auszuüben, müssen Sie uns (Clemens Creutzburg, CTB-IT, In den Sieben Stücken 9d, 30655 Hannover, E-Mail: info@ctb-it.de; Telefonnummer siehe Impressum) mittels einer eindeutigen Erklärung, zum Beispiel per Brief oder E-Mail, über Ihren Entschluss informieren, diesen Vertrag zu widerrufen. Sie können außerdem die hervorgehoben bereitgestellte elektronische Funktion [Vertrag widerrufen](widerrufen.php) verwenden. Sie können das nachstehende Muster-Widerrufsformular nutzen; dies ist nicht vorgeschrieben.
+
+Zur Wahrung der Widerrufsfrist reicht es aus, dass Sie die Mitteilung über die Ausübung des Widerrufsrechts vor Ablauf der Widerrufsfrist absenden.
+
+### Folgen des Widerrufs
+
+Wenn Sie diesen Vertrag widerrufen, haben wir Ihnen alle Zahlungen, die wir von Ihnen erhalten haben, unverzüglich und spätestens binnen vierzehn Tagen ab dem Tag zurückzuzahlen, an dem die Mitteilung über Ihren Widerruf bei uns eingegangen ist. Für die Rückzahlung verwenden wir dasselbe Zahlungsmittel wie bei der ursprünglichen Transaktion, sofern nicht ausdrücklich etwas anderes vereinbart wurde; Ihnen werden wegen dieser Rückzahlung keine Entgelte berechnet.
+
+Haben Sie verlangt, dass eine kostenpflichtige Dienstleistung während der Widerrufsfrist beginnen soll, zahlen Sie uns einen angemessenen Betrag. Dieser entspricht dem Anteil der bis zu dem Zeitpunkt, zu dem Sie uns über den Widerruf unterrichten, bereits erbrachten Leistung im Vergleich zum Gesamtumfang der im Vertrag vorgesehenen Leistung.
+
+## Muster-Widerrufsformular
+
+Wenn Sie den Vertrag widerrufen wollen, können Sie folgenden Text an Clemens Creutzburg, CTB-IT, In den Sieben Stücken 9d, 30655 Hannover, E-Mail: info@ctb-it.de senden:
+
+Hiermit widerrufe ich den von mir abgeschlossenen Vertrag über die Erbringung der Kaffeeliste-Dienstleistung.
+
+- Bestellt am:
+- Name des Verbrauchers:
+- Anschrift des Verbrauchers:
+- Kundenkürzel oder Vertragsreferenz:
+- Datum:
+- Unterschrift (nur bei Mitteilung auf Papier):
+
+Stand: 22. August 2026
diff --git a/login.php b/login.php
index 5b56d3f..9e2353c 100644
--- a/login.php
+++ b/login.php
@@ -115,7 +115,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
ImpressumAGBDatenschutz
+ AVV
+ Widerrufsbelehrung
+ Vertrag widerrufenPreise
+ Verträge hier kündigen
diff --git a/mandant-einstellungen.php b/mandant-einstellungen.php
index e1915ea..82e9beb 100644
--- a/mandant-einstellungen.php
+++ b/mandant-einstellungen.php
@@ -67,6 +67,7 @@ if ($canManageSettings) {
$errors = $result['errors'];
$settings = [
'name' => $_POST['tenant_name'] ?? '',
+ 'customer_type' => $_POST['customer_type'] ?? 'unknown',
'timezone' => $_POST['timezone'] ?? 'Europe/Berlin',
'locale' => $_POST['locale'] ?? 'de-DE',
'currency_code' => $_POST['currency_code'] ?? 'EUR',
@@ -137,6 +138,14 @@ include 'nav.php';
Aktueller Tarif:
Aktive Teilnehmer:
+
+ Vertrag gekündigt: Der Zugang endet am Uhr. Bitte lade vorher den Datenexport herunter.
+
+ Gekündigt: Der kostenpflichtige Tarif endet . Danach gilt der kostenlose Tarif.
+
Danke! Die Änderung wird verarbeitet, der Tarif ist gleich aktuell.
Der Bezahlvorgang wurde abgebrochen, es wurde nichts geändert.
+
+
Die Tarifänderung wurde ausgeführt, aber die Vertragsbestätigung konnte nicht per E-Mail versendet werden. Bitte speichere die AGB und bei privater Nutzung die Widerrufsbelehrung und melde dich über das Ticketsystem.
Ein Wechsel zwischen bezahlten Tarifen wird bei Stripe anteilig verrechnet (Proration) und
- gilt sofort. Details zu den Tarifgrenzen stehen unter Preise.
+
Bei einem Wechsel zwischen bezahlten Tarifen gilt die neue Teilnehmergrenze sofort; der neue Monatspreis wird ab der nächsten Verlängerung berechnet. Die Kündigung zum kostenlosen Tarif wirkt zum Ende der laufenden Abrechnungsperiode. Details stehen unter Preise.
+
+
+
Der Mandant hat noch einen laufenden kostenpflichtigen Tarif. Kündige
+ ihn zuerst unter Mandant-Einstellungen.
+ Der Tarif bleibt bis zum Ende der bereits bezahlten Periode nutzbar;
+ anschließend kannst du den Mandanten und seine operativen Daten hier
+ endgültig löschen.
+
Diese Aktion kann nicht rückgängig gemacht werden. Alle Daten von
diff --git a/passwort-vergessen.php b/passwort-vergessen.php
index f393a71..a429a64 100644
--- a/passwort-vergessen.php
+++ b/passwort-vergessen.php
@@ -112,7 +112,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
ImpressumAGBDatenschutz
+ AVV
+ Widerrufsbelehrung
+ Vertrag widerrufenPreise
+ Verträge hier kündigen
diff --git a/passwort-zuruecksetzen.php b/passwort-zuruecksetzen.php
index b30f357..bc2d160 100644
--- a/passwort-zuruecksetzen.php
+++ b/passwort-zuruecksetzen.php
@@ -105,7 +105,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
ImpressumAGBDatenschutz
+ AVV
+ Widerrufsbelehrung
+ Vertrag widerrufenPreise
+ Verträge hier kündigen
diff --git a/preise.php b/preise.php
index be6811c..2ca74a4 100644
--- a/preise.php
+++ b/preise.php
@@ -1,4 +1,4 @@
-
+
@@ -52,9 +52,17 @@
-
Beim Überschreiten einer Stufe wird automatisch zur nächsthöheren
- gewechselt. Gemäß § 19 UStG wird keine Umsatzsteuer berechnet – die
- genannten Beträge sind die tatsächlich zu zahlenden Endpreise.
+
Es gibt keine automatische Hochstufung. Ist die Grenze erreicht,
+ wählst du selbst einen passenden Tarif oder deaktivierst Teilnehmer.
+ Gemäß § 19 UStG wird keine Umsatzsteuer berechnet – die genannten
+ Beträge sind die tatsächlich zu zahlenden monatlichen Endpreise.
+
+
Alle Tarife laufen unbefristet und haben eine monatliche
+ Abrechnungsperiode. Kostenpflichtige Tarife sind jederzeit zum Ende der
+ laufenden Periode kündbar; es gibt keine längere Mindestlaufzeit. Zahlung
+ erfolgt monatlich im Voraus über Stripe. Beim Tarifwechsel gilt die neue
+ Teilnehmergrenze sofort und der neue volle Preis ab der nächsten
+ Verlängerung.
Wir haben die Eingangsbestätigung sofort an gesendet.
+
+
+
Der Widerruf wurde gespeichert, aber die E-Mail-Bestätigung konnte nicht versendet werden. Bitte speichere die Bestätigung jetzt über den folgenden Link und kontaktiere uns bei Bedarf über das Ticketsystem.