Newsletter ToDo

📧 Newsletter-System – Detail ToDo

1. Datenbank / Modelle (Prisma)

  • [ ] NewsletterSubscription (E-Mail, Status, Quelle, createdAt, unsubscribedAt)
  • [ ] SubscriptionSource (z. B. Formular, Tattoo/Piercing-Form, Admin-Import, CSV-Upload)
  • [ ] NewsletterCampaign (Name, Betreff, Inhalt, Status: Draft/Sent)
  • [ ] NewsletterCampaignRecipient (Verknüpfung Kampagne ↔ Abonnent + Status: Sent/Opened/Bounced)

Enums:

  • SubscriptionStatus → SUBSCRIBED, UNSUBSCRIBED, BOUNCED
  • SourceType → FORM, ADMIN, IMPORT
  • CampaignStatus → DRAFT, SCHEDULED, SENT
  • RecipientStatus → PENDING, SENT, OPENED, BOUNCED

2. Backfill & Migration

  • [ ] E-Mails mit agreeNewsletter = true aus Tattoo-/PiercingForm übernehmen
  • [ ] Standard-Quelle „Formulare“ setzen

3. Unsubscribe-Flow

  • [ ] API-Route POST /api/newsletter/unsubscribe → validiert Token
  • [ ] Generierung von sicheren Tokens (Hash + Ablaufzeit)
  • [ ] Seite /newsletter/unsubscribe/[token] mit Bestätigung („Sie wurden abgemeldet“)

4. Admin-Interface

  • [ ] Abonnenten-Liste mit Filter (aktiv, abgemeldet, gebounced)
  • [ ] Quelle anzeigen (Formular, Admin, Import etc.)
  • [ ] Kampagnen-Übersicht (Status, Statistiken: gesendet, geöffnet, gebounced)
  • [ ] Neue Kampagne erstellen (Betreff, Inhalt, Zielgruppe, Zeitplan)

5. Versand

  • [ ] Versand über SMTP oder Mail-API (z. B. SendGrid / Postmark optional)
  • [ ] Tracking-Pixel für Öffnungsrate
  • [ ] Bounce-Handling (Mail zurück → Status auf BOUNCED)

6. Extras / Nice-to-Have

  • [ ] Segmentierung (nur Kunden mit Tattoo, Piercing etc.)
  • [ ] Vorlagen-System (HTML + Platzhalter wie {{studioName}})
  • [ ] Statistik-Dashboard (Open-Rate, Klicks, Abmeldungen)