Zum Inhalt springen

User Stories

User Stories werden pro Meilenstein definiert. M1 (Fundament) ist reines Infra-Setup und wird ueber die Task-Checkliste in der Roadmap abgedeckt.


Als Betreiber moechte ich Kunden und deren Websites im CMS anlegen und verwalten damit ich neue Kunden effizient onboarden kann.

Als Betreiber moechte ich einen neuen Kunden mit Firmenname, Kontaktdaten und Paket anlegen damit ich den Kunden im System erfassen kann.

Akzeptanzkriterien:

  • Formular mit Pflichtfeldern: Firmenname, Ansprechpartner, E-Mail, Paket
  • Kunde wird in PostgreSQL gespeichert (Tenant-ID generiert)
  • Validierung: E-Mail-Format, Pflichtfelder
  • Kunde erscheint in der Kundenliste

Prioritaet: Must

Als Betreiber moechte ich einem Kunden eine oder mehrere Websites zuordnen damit ich Kunden mit Filialen abbilden kann.

Akzeptanzkriterien:

  • Website anlegen mit: Name, Domain, Astro-Template-Referenz
  • Website ist einem Kunden zugeordnet (Tenant-ID)
  • Mehrere Websites pro Kunde moeglich
  • Website erscheint im Kunden-Dashboard

Prioritaet: Must


Als Benutzer (Betreiber oder Kunde) moechte ich mich sicher am CMS anmelden damit nur autorisierte Personen Inhalte aendern koennen.

Als Benutzer moechte ich mich mit E-Mail und Passwort anmelden damit ich Zugang zum CMS erhalte.

Akzeptanzkriterien:

  • Login-Formular mit E-Mail + Passwort
  • Session-Cookie wird gesetzt
  • Brute-Force-Schutz (Rate-Limiting nach 5 Fehlversuchen)
  • Weiterleitung zum Dashboard nach erfolgreichem Login
  • Fehlermeldung bei falschen Credentials (ohne zu verraten ob E-Mail existiert)

Prioritaet: Must

Als Benutzer moechte ich mich abmelden damit meine Session beendet wird.

Akzeptanzkriterien:

  • Logout-Button im CMS
  • Session wird serverseitig invalidiert
  • Weiterleitung zur Login-Seite

Prioritaet: Must

Als Benutzer moechte ich mein Passwort per E-Mail zuruecksetzen damit ich bei Vergessen wieder Zugang erhalte.

Akzeptanzkriterien:

  • “Passwort vergessen”-Link auf der Login-Seite
  • E-Mail mit Reset-Link wird via SES versendet
  • Link ist zeitlich begrenzt (z.B. 1 Stunde)
  • Neues Passwort setzen ueber den Link
  • Alte Session wird invalidiert

Prioritaet: Must


Als Betreiber moechte ich die Inhalte einer Kundenwebseite im CMS pflegen damit ich die Seite nach dem Design mit echten Texten und Bildern befuellen kann.

Als Betreiber moechte ich die Texte einer Seite in vordefinierten Platzhaltern aendern damit ich den Inhalt aktualisieren kann ohne das Design zu veraendern.

Akzeptanzkriterien:

  • Pro Seite werden die definierten Text-Platzhalter angezeigt
  • Textfelder sind editierbar (einfacher Text, kein Rich-Text)
  • Aenderungen werden in PostgreSQL gespeichert (JSONB)
  • Platzhalter-Struktur wird vom Astro-Template definiert

Prioritaet: Must

Als Betreiber moechte ich Bilder in vordefinierten Platzhaltern austauschen damit ich kundenspezifische Fotos einsetzen kann.

Akzeptanzkriterien:

  • Bild-Upload per Drag & Drop oder Dateiauswahl
  • Unterstuetzte Formate: JPG, PNG, WebP
  • Dateigroessen-Limit pro Upload (z.B. 10 MB)
  • Upload geht nach R2 + async Mirror nach S3-IA
  • EXIF-Daten werden entfernt (DSGVO)
  • Bild-URL wird im Platzhalter gespeichert
  • Quota-Check vor Upload

Prioritaet: Must


Als Betreiber moechte ich alle hochgeladenen Medien eines Kunden ueberblicken damit ich Dateien wiederverwenden und den Speicherverbrauch kontrollieren kann.

Als Betreiber moechte ich alle Medien eines Kunden in einer Bibliothek sehen damit ich einen Ueberblick ueber alle hochgeladenen Dateien habe.

Akzeptanzkriterien:

  • Grid-Ansicht aller Medien (Thumbnails)
  • Anzeige pro Datei: Name, Groesse, Hochladedatum, verwendete Seite(n)
  • Anzeige Speicherverbrauch gesamt vs. Quota
  • Filterbar nach Typ (Bild, PDF, etc.)

Prioritaet: Must

Als Betreiber moechte ich eine Datei aus der Medien-Bibliothek loeschen damit ich Speicherplatz freigeben kann.

Akzeptanzkriterien:

  • Loeschen-Button pro Datei
  • Warnung wenn Datei noch in einem Platzhalter verwendet wird
  • Datei wird aus R2 und S3-IA geloescht
  • Speicherverbrauch wird aktualisiert

Prioritaet: Must


Als Betreiber moechte ich dass Inhaltsaenderungen automatisch die Kundenwebseite aktualisieren damit ich nicht manuell deployen muss.

Als Betreiber moechte ich nach dem Speichern von Aenderungen einen Build ausloesen damit die Kundenwebseite aktualisiert wird.

Akzeptanzkriterien:

  • “Veroeffentlichen”-Button im CMS
  • CMS ruft Cloudflare Pages Deploy Hook auf
  • Build-Status wird im CMS angezeigt (ausstehend, laeuft, erfolgreich, fehlgeschlagen)
  • Bei Fehler bleibt die alte Version live

Prioritaet: Must

Als Astro-Build-Prozess moechte ich die Kundendaten per API vom CMS abrufen damit ich die statische Seite generieren kann.

Akzeptanzkriterien:

  • REST-API liefert alle Inhalte einer Website (Seiten, Platzhalter, Medien-URLs)
  • Service-Auth (API-Key oder Token, nicht Session-basiert)
  • Erreichbar ueber Cloudflare Tunnel
  • Response als JSON, strukturiert nach Seiten und Platzhaltern

Prioritaet: Must

Als Kunde moechte ich per E-Mail benachrichtigt werden wenn meine Seite live ist damit ich weiss dass meine Aenderungen sichtbar sind.

Akzeptanzkriterien:

  • CMS prueft Build-Status via Cloudflare API
  • Bei erfolgreichem Build: E-Mail an Kunden-Ansprechpartner via SES
  • E-Mail enthaelt Link zur Webseite
  • Bei fehlgeschlagenem Build: E-Mail an Betreiber (nicht an Kunden)

Prioritaet: Should

Als Betreiber moechte ich die Domain eines Kunden in Cloudflare einrichten damit die Webseite unter der Kundendomain erreichbar ist.

Akzeptanzkriterien:

  • Domain in Cloudflare DNS konfigurieren (API oder manuell)
  • SSL wird automatisch bereitgestellt
  • Cloudflare Pages Custom Domain zuweisen
  • Domain-Status im CMS sichtbar

Prioritaet: Must


Als Kunde moechte ich meine Webseiteninhalte selbst pflegen damit ich nicht fuer jede Textaenderung den Betreiber kontaktieren muss.

Als Kunde moechte ich nach dem Login nur meine eigene(n) Website(s) sehen damit ich nicht von fremden Daten abgelenkt werde.

Akzeptanzkriterien:

  • Kunde sieht nur eigene Websites (Tenant-Isolation)
  • Dashboard zeigt: Website-Name, Domain, letzter Build-Status, letzte Aenderung
  • Kein Zugriff auf Betreiber-Funktionen oder andere Kunden

Prioritaet: Must

Als Kunde moechte ich Mitarbeitern Zugang zum CMS geben damit mehrere Personen Inhalte pflegen koennen.

Akzeptanzkriterien:

  • Mitarbeiter einladen per E-Mail
  • Einladungs-E-Mail mit Registrierungslink via SES
  • Mitarbeiter gehoeren zum gleichen Tenant
  • Kunde kann Mitarbeiterzugaenge deaktivieren
  • Mitarbeiter sehen die gleichen Websites wie der Kunde

Prioritaet: Must

Als Kunde moechte ich meine Oeffnungszeiten im CMS aendern damit Besucher aktuelle Informationen sehen.

Akzeptanzkriterien:

  • Strukturiertes Formular: Wochentag + Von/Bis + optional “geschlossen”
  • Sonderoeffnungszeiten / Feiertage moeglich
  • Aenderungen werden nach Veroeffentlichung auf der Webseite sichtbar

Prioritaet: Must

Als Kunde moechte ich Meta-Title und Meta-Description pro Seite bearbeiten damit meine Seite in Google-Ergebnissen ansprechend dargestellt wird.

Akzeptanzkriterien:

  • Pro Seite: Meta-Title (max. 60 Zeichen) und Meta-Description (max. 160 Zeichen)
  • Zeichenzaehler im Formular
  • Vorschau wie der Google-Eintrag aussehen wuerde
  • Fallback auf Standard-Werte wenn leer

Prioritaet: Should

Als Kunde moechte ich mein Impressum und meine Datenschutzerklaerung ueber einen Generator erstellen damit ich rechtlich abgesichert bin ohne einen Anwalt beauftragen zu muessen.

Akzeptanzkriterien:

  • Impressum: Strukturiertes Formular mit Pflicht- und Optionalfeldern (siehe Spezifikation)
  • Datenschutz: Automatisch generiert basierend auf aktivierten Features
  • Verantwortlicher wird aus Impressum-Daten uebernommen
  • Aenderungen loesen neuen Build aus
  • Hinweis: “Keine Rechtsberatung, Template anwaltlich geprueft”

Prioritaet: Must

Als Kunde moechte ich sehen wer wann was geaendert hat damit ich Aenderungen nachvollziehen kann (besonders bei mehreren Mitarbeitern).

Akzeptanzkriterien:

  • Chronologische Liste: Zeitstempel, Benutzer, Aktion, betroffene Seite/Feld
  • Filterbar nach Benutzer und Zeitraum
  • Nur Aenderungen des eigenen Tenants sichtbar

Prioritaet: Should

Als Kunde moechte ich eine fruehere Version eines Inhalts wiederherstellen damit ich versehentliche Aenderungen korrigieren kann.

Akzeptanzkriterien:

  • Pro Platzhalter: Liste der letzten X Versionen mit Zeitstempel
  • Vorschau des alten Werts
  • “Wiederherstellen”-Button setzt den alten Wert
  • Wiederherstellung wird im Audit-Log protokolliert

Prioritaet: Should


Als Website-Besucher moechte ich den Betrieb ueber ein Formular kontaktieren damit ich eine Anfrage stellen kann ohne eine E-Mail-App oeffnen zu muessen.

Als Website-Besucher moechte ich ein Kontaktformular mit meinem Anliegen absenden damit der Betrieb meine Anfrage erhaelt.

Akzeptanzkriterien:

  • Formular mit konfigurierbaren Feldern (Name, E-Mail, Nachricht + Custom-Felder)
  • Cloudflare Turnstile Spam-Schutz
  • Absenden geht an Pages Function → API Gateway → SQS
  • Bestaetigung fuer den Absender (“Nachricht wurde gesendet”)
  • Kein Tracking, DSGVO-konform
  • Hinweis auf Datenschutzerklaerung unter dem Formular

Prioritaet: Must

Als Kunde moechte ich eingehende Kontaktanfragen in meinem CMS-Dashboard sehen damit ich schnell auf Anfragen reagieren kann.

Akzeptanzkriterien:

  • Liste aller Anfragen: Datum, Name, E-Mail, Nachricht (gekuerzt)
  • Detail-Ansicht pro Anfrage
  • Status: Neu / Gelesen
  • Nur Anfragen des eigenen Tenants sichtbar

Prioritaet: Must

US-023: E-Mail-Benachrichtigung bei Kontaktanfrage

Abschnitt betitelt „US-023: E-Mail-Benachrichtigung bei Kontaktanfrage“

Als Kunde moechte ich per E-Mail benachrichtigt werden wenn eine Kontaktanfrage eingeht damit ich zeitnah reagieren kann.

Akzeptanzkriterien:

  • CMS sendet E-Mail via SES an Kunden-E-Mail
  • E-Mail enthaelt: Name, E-Mail, Nachricht des Absenders
  • Absender-Domain ist die Kundendomain (z.B. noreply@kunde.de)
  • Link zum CMS-Dashboard in der E-Mail

Prioritaet: Must

Als Betreiber moechte ich die Felder des Kontaktformulars pro Kunde konfigurieren damit verschiedene Branchen unterschiedliche Informationen abfragen koennen.

Akzeptanzkriterien:

  • Felder hinzufuegen/entfernen: Text, E-Mail, Telefon, Dropdown, Textarea
  • Pflichtfeld ja/nein pro Feld
  • Reihenfolge per Drag & Drop
  • Aenderungen erfordern neuen Build

Prioritaet: Must

Als Kunde moechte ich einen WhatsApp- und/oder Telefon-Button auf meiner Webseite haben damit Besucher mich direkt kontaktieren koennen.

Akzeptanzkriterien:

  • Konfigurierbar im CMS: Telefonnummer, WhatsApp-Nummer (optional)
  • Sticky-Button auf der Webseite (Mobile-optimiert)
  • WhatsApp oeffnet Chat mit vordefinierter Nachricht (optional)

Prioritaet: Should