Zurück zur Startseite
Changelog

Release-Historie

54+ Sprints + Sprint Tax + Sprint Organizer-i18n + Hotfix B1–B4 + Sicherheits-Analyse-Runden + weitere Patches. 660+ Features. Alles dokumentiert.

Organizer-i18n
Mai 2026Neueste Version

Sprint Organizer-i18nOrganizer-Portal Mehrsprachigkeit — DE + EN live

  • ~2.970 UI-Strings vollständig durch useTranslations() ersetzt — 66 Namespaces decken alle Portal-Seiten und Komponenten ab
  • DB-basierte Locale-Pakete: OrganizerLocalePackage (locale, label, isActive, content JSON) — kein Deploy nötig für neue Sprachen
  • ORGANIZER_LOCALE Cookie (365d, SameSite=lax) — automatisch gesetzt bei Login, aktualisiert bei Sprachwechsel im Profil
  • Locale-Auflösung: manuelle Präferenz > billingCountry-Mapping (DE/AT/CH → de, alle anderen → en) > Fallback EN
  • Sprachauswahl unter /organizer/profile — Dropdown mit allen aktiven Paketen
  • Admin-UI /admin/languages: Organizer-Locale-Pakete verwalten — CRUD, JSON-Export, Paket-Kopieren
  • Export/Import-Workflow: Paket als organizer-locale-{locale}.json herunterladen → übersetzen → via Admin hochladen und aktivieren
  • lib/organizer-locale.ts: ORGANIZER_LOCALE_COOKIE + resolveOrganizerLocale() — zentrale Locale-Auflösung
  • DE live, EN vollständig übersetzt: locales/organizer/en.json, 117 KB, 2.477 Keys
  • master-language.jsonc: 6.137 Zeilen, vollständiger Schlüsselkatalog mit Quellkommentaren (filepath:line)
Tax
Mai 2026

Sprint TaxSprint Tax — Internationales Steuermodell

  • billingCountry, vatRate (Decimal 0–1), taxIncluded (Boolean: true = Brutto, false = Netto) auf OrganizerProfile
  • MwSt-Ausweis auf PDF-Tickets und Bestätigungs-E-Mails: Netto / MwSt. / Brutto / USt-IdNr. in allen 11 Sprachen
  • 11 Länder-Defaults per GET /api/organizer/tax-defaults: DE 19%, AT 20%, CH 8.1%, NL/BE/ES 21%, FR 20%, IT 22%, PL 23%
  • VIES-Validierung (Phase 3b): GET /api/organizer/vat-check — EU-Proxy für 9 Länder (DE/FR/NL/PL/AT/ES/IT/DK/SE), 5s Timeout, nie blockierend
  • VIES-Response: { valid, name?, notSupported? } — Auto-Fill Firmenname bei valider EU-USt-ID, debounced 800ms
  • USt-ID-Formatvalidierung: Regex für 11 EU-Länder + CH/NO (client-seitig, sofortige Rückmeldung)
  • AccommodationBlock: 50+ Unsplash-Stadtfotos (Europa + Weltstädte) + Hotelzimmer-Fallback für unbekannte Städte
52
Mai 2026

Sprint 52Partner-Marquee & Admin Content-Sidebar

  • MarqueeItem-Prisma-Modell: name, isActive, sortOrder — CRUD über Admin-Content-UI
  • CSS-Marquee-Komponente mit @keyframes-Animation: nahtlose Schleife, Fade-Effekt an den Rändern
  • Admin-CRUD /admin/content: Banner, Tags und Marquee-Einträge in einer einheitlichen Sidebar verwalten
  • i18n: Marquee- und Banner-Texte in allen 11 Sprachen unterstützt
51
Mai 2026

Sprint 51Booking Partner + UI-Verbesserungen

  • BookingPartner-Prisma-Modell: 3 vorinstallierte Partner (Booking.com, Airbnb, Hotels.com) — urlTemplate mit {city}/{checkin}/{checkout}/{affiliateId} Platzhaltern, affiliateId, isActive, clickCount
  • Admin-UI /admin/booking-partners: Affiliate-ID-Feld pro Partner, Radio-Toggle (nur einer gleichzeitig aktiv), Klick-Zähler-Badge, "Gespeichert!"-Feedback; atomare Transaktion beim Aktivieren (alle anderen werden deaktiviert)
  • AccommodationBlock Server Component auf Event-Detailseite: Unsplash-Stadtbild (30+ europäische Städte gemappt), dunkler Gradient-Overlay links für Lesebarkeit, Partner-farbiger CTA-Button
  • Intro-Text "Buche über unseren Partner X:" über dem Block; erscheint nur wenn aktiver Partner + affiliateId + event.city + Event in der Zukunft
  • Click-Tracking: /api/booking-partners/[id]/click — atomares clickCount++ (fire-and-forget), 302-Redirect zur Partner-URL mit Stadt + Check-in/Checkout vorbelegt
  • i18n in allen 11 Sprachen: events.accommodation-Namespace (label, title, intro, subtitle, cta) — alle 11 locales/*.json-Dateien aktualisiert
  • Genre-Chips auf /events: TagChips-Client-Komponente — Häufigkeits-Sortierung via Map-Counter (meistgenutzte zuerst), max. 20 Chips sichtbar
  • "Mehr anzeigen"-Modal: pendingTags-State, "Alle abwählen"-Button, "Anwenden"-Button mit router.push — aktive versteckte Tags als "+X aktiv"-Badge in Primary-Color
  • Bug-Fix /admin/featured: vergangene Events werden nicht mehr in der Auswahlliste angezeigt (endDate: { gte: new Date() })
  • Bug-Fix Gästeliste: guests.filter-Crash behoben — API liefert { entries, total, page, pages }, Client nutzt Array.isArray(data) ? data : (data.entries ?? [])
50
Mai 2026

Sprint 50Phasen-Verkauf

  • TicketPhase-Prisma-Modell: ticketTypeId, phaseNumber, name, quantity, price, startsAt, startsWhenSoldOut, soldCount — mehrere Phasen pro Ticket-Typ
  • CRUD /api/organizer/events/[id]/ticket-phases + /[phaseId]
  • getActivePhase() in lib/pricing.ts — Datum-Trigger (startsAt <= now) ODER Sold-Out-Trigger aus Vorgänger-Phase, kombinierbar
  • Phase-Builder UI /organizer/events/[id]/phases mit Fortschrittsbalken pro Phase + Status-Indikatoren
  • Checkout-Logik nutzt aktive Phase automatisch — Preis und Kontingent aus der aktuell gültigen Phase
49
Mai 2026

Sprint 49Einlass-Kurven-Prognose + Venue-Bibliothek

  • CheckinForecastSection im Analytics-Dashboard: historische checkedInAt-Zeitstempel aller vergangenen Events aggregiert, normalisiert auf Minuten ab Event-Startzeit, 8 Zeitbuckets (-60 bis +300 Min), Peak-Bucket-Hervorhebung
  • API GET /api/organizer/events/[id]/checkin-forecast — Mindest-3-Events-Guard, gibt Prognose-Daten zurück
  • Venue-Bibliothek: Venue + VenueSeatingTemplate-Prisma-Modelle. private (Standard) oder public (erfordert Admin-Freigabe)
  • CRUD /api/organizer/venues + /api/organizer/venues/[id]/seating-templates. Admin-Endpunkte /api/admin/venues
  • VenuePicker-Komponente im EventWizard Step 2: Klick füllt Felder (Name, Adresse, Koordinaten, Kapazität) per Klick
  • Admin-Freigabe-UI /admin/venues: "Ausstehend"- und "Freigegeben"-Abschnitte, approve/reject-Aktionen
48
Mai 2026

Sprint 48Entdeckungs-Map + Organizer-Onboarding-Sequenz

  • /events/map: MapLibre GL Karte mit lila Event-Pins, Popup (Titel/Datum/ab-Preis/Link), Toggle zwischen Listen- und Kartenansicht
  • Events-API um ?view=map erweitert: lat/lng-Filter, max. 500 Events gleichzeitig auf Karte
  • Organizer-Onboarding-Sequenz: 5 E-Mail-Templates (Tag 0/1/3/7/14) nach Admin-Freischaltung — Willkommen, Event anlegen, Tickets, Staff, Analytics
  • onboardingStep (0–5) + onboardingStartedAt + firstEventPublishedAt auf OrganizerProfile; Sequenz stoppt bei erstem veröffentlichtem Event
  • Cron /api/cron/organizer-onboarding: täglich, berechnet daysSince und sendet nächste E-Mail
47
Mai 2026

Sprint 47Presale-Code-Batches + Automatischer Post-Event Report

  • PresaleCodeBatch + PresaleBatchCode-Prisma-Modelle: Auto-generierte Codes mit Präfix (INSTA-A3F9B7), maxUsagesPerCode, atomares usedCount-Increment
  • CRUD /api/organizer/events/[id]/presale-batches, Batch-Management-UI im Ticket-Tab, CSV-Export pro Batch
  • Erweiterte Presale-Validierung: sucht erst Batch-Code, dann Legacy-Code — abwärtskompatibel
  • Post-Event Report PDF: generateEventReportPDF() in lib/pdf.ts — Umsatz, Attendance-Rate, Check-in-Kurve, Storno-Rate, Addon-Umsatz
  • Cron /api/cron/post-event-report: täglich, sendet 24h nach Event-Ende PDF-Report per E-Mail an Organizer
  • postEventReportSentAt auf TicketEvent — verhindert Mehrfach-Versand
46
Mai 2026

Sprint 46Gezielte Käufer-E-Mail + "Erinnere mich"-Notification

  • POST /api/organizer/events/[id]/message mit ticketTypeIds-Filter — segmentierte Direktnachricht an ausgewählte Ticket-Typ-Inhaber (z.B. nur VIP, nur Stehplatz)
  • Rate-Limit: 3 Massen-E-Mails pro Event/Tag. Audit-Log-Eintrag bei jedem Versand
  • "Erinnere mich"-Button auf Event-Detailseite: EventInterest-Modell speichert E-Mail + Event-ID
  • E-Mail-Benachrichtigung wenn Tickets für ein gewünschtes Event live gehen — Cron-Check bei Event-Veröffentlichung
SP
Mai 2026

Sprint SPAdmin-Sprachen-Verwaltung + Deckungsbeitrag-Kalkulator

  • /admin/languages: Aktivieren/Deaktivieren der 11 i18n-Sprachen (DE/EN/FR/NL/PL/ES/DA/IT/SV/FI/NO)
  • disabledLocales als String-Array in AdminSettings (DB via prisma db push); /api/locales liefert nur aktive Locales
  • LocalePicker zeigt ausschließlich aktivierte Sprachen — deaktivierte Sprachen verschwinden sofort aus der Sprachauswahl
  • Deckungsbeitrag-Kalkulator als eigenständiger zweiter Tab in /organizer/fee-calculator: Fixkosten (dynamisch hinzufügbar), variable Kosten pro Ticket
  • Automatische Plattform- + Zahlungsgebühren aus DB via GET /api/organizer/fee-config (respektiert platformFeeOverride pro Organizer + kioskFeeExtra), Kiosk-Toggle
  • Break-Even-Punkt-Anzeige, Auslastungs-%-Visualisierung, Szenarien-Tabelle. Sidebar-Redesign: identisches Layout-Muster wie /organizer/profile
39
Mai 2026

Sprint 39Mail Retry, API-Keys, Finance-Presets, Flex-Ticket, Scanner-Gate

  • Mail Retry: fehlgeschlagene E-Mails direkt aus /admin/emails per Button erneut senden — rawBody in EmailLog gespeichert, neuer Log-Eintrag bei Retry
  • API-Keys nach Veranstalter: /admin/api-keys zeigt System-Keys und Veranstalter-API-Keys in getrennten Sektionen
  • Finance-Presets: Q1/Q2/Q3/Q4, aktuelles Jahr, Vorjahr als Preset-Buttons im Finance-Dashboard — ein Klick statt manueller Datumseingabe
  • Flex-Ticket: isFlexTicket Flag pro Ticket-Typ — Käufer wählt aus allen Terminen einer Event-Serie, flexSelectedEventId in DB gespeichert
  • Öffentliche API /api/events/[slug]/series-dates liefert Live-Verfügbarkeit aller Serientage
  • Scanner-Gate: aktive Bestätigung bei personalisierten Tickets ("Ausweis geprüft"), Doppelscan, gesperrtem Ticket — normaler grüner Einlass ohne Unterbrechung
BD
Mai 2026

Sprint BDWhite-Label — Custom Domain, Favicon, OG-Bild, Vercel-API

  • Sprint B: Custom Domain per CNAME — Veranstalter binden eigene Domain (z.B. tickets.meinveranstaltung.de) an. Organizer-Logo auf Event-Seiten + eigene Primärfarbe
  • "Powered by tl-tickets"-Badge konfigurierbar (optional ausblendbar). DNS-Anleitung im Organizer-Portal. Admin-UI für Domain-Verwaltung
  • Sprint D: Custom Favicon pro Organizer. Custom OG-Bild (1200×630) für Social-Media-Sharing
  • Vercel-API Auto-Domain-Registrierung: neue CNAME-Einträge automatisch über Vercel-API registriert
  • DNS-Check mit Echtzeit-Statusanzeige via Cloudflare DoH. Admin-Übersicht /admin/white-label für alle registrierten Domains
  • generateMetadata-Middleware: dynamische og:title, og:image, og:description, favicon pro Organizer
A
Mai 2026

Sprint AInternationalisierung — 11 Sprachen

  • 11 Sprachen live: DE, EN, FR, NL, PL, ES, DA, IT, SV, FI, NO — vollständig abgeschlossen
  • next-intl 4.12.0: Cookie-basiertes Locale-Routing (tl_locale Cookie, 1 Jahr), kein URL-Prefix
  • LocalePicker-Modal: beim ersten Besuch, jederzeit änderbar, Geolocation-Vorschlag via Vercel-Header (x-vercel-ip-country)
  • Vollständiger Buyer-Flow übersetzt: Event-Detailseite, TicketSelector, Checkout, Ticket-Confirm, ContactModal
  • TicketSelector Fortschrittsbalken: grün > 50%, amber 10–50%, rot < 10% — ersetzt statischen Text
  • E-Mails in Käufersprache: buyerLocale in DB gespeichert, alle 11 Locales in lib/email.ts
38
Mai 2026

Sprint 38TL-Loyalty-Programm

  • Event-Konfiguration: loyaltyEnabled, loyaltyPointMode (per_ticket/per_eur), loyaltyPointValue im Event-Wizard Step 5 — Organizer aktiviert Loyalty pro Event
  • loyaltyRedeemScope auf OrganizerProfile: "Nur bei mir" oder "Plattformweit" — Einlösen auf Events anderer Veranstalter steuerbar
  • Prisma: LoyaltyCode-Modell (einmalig generierter Einlösecode), LoyaltyMagicLink-Modell (tokenbasierter Zugang ohne Account), lastEarnedAt auf LoyaltyAccount, eventId auf LoyaltyTransaction
  • lib/loyalty.ts erweitert: earnLoyaltyPointsForEvent(), generateLoyaltyCode(), sendLoyaltyCodeEmail(), deductLoyaltyPointsForOrder(), createLoyaltyMagicLink(), validateLoyaltyMagicLink()
  • lib/email.ts: sendLoyaltyCodeEmail() + sendLoyaltyMagicLinkEmail() — vollständige E-Mail-Templates für Loyalty-Flows
  • Käufer-API: /api/loyalty/balance, /api/loyalty/history, /api/loyalty/redeem-to-code, /api/loyalty/magic-link, /api/loyalty/magic-link/[token]
  • /api/loyalty/lookup — öffentlicher Endpunkt: E-Mail-Adresse eingeben, Punktestand direkt zurück (kein Account nötig)
  • Organizer-API: /api/organizer/loyalty/stats (Gesamtpunkte, Mitglieder, Top-Events), /api/organizer/loyalty/members (paginiert), /api/organizer/loyalty/settings (GET + PATCH)
  • Cron /api/cron/loyalty-expiry: automatisches Verfallen abgelaufener Punkte
  • Buyer-Dashboard /my-tickets/loyalty: Magic-Link-Auth, Punktestand, Einlöseformular, Transaktionshistorie — kein Account nötig
  • Organizer-Dashboard /organizer/loyalty: 3 Tabs (Stats, Members, Settings) — Loyalty-KPIs, Mitgliederliste, Scope-Einstellungen
  • LoyaltyBadge-Komponente: kompaktes ⭐ N Pill auf Event-Cards (featured + grid), Tooltip via createPortal (nicht durch overflow-hidden abgeschnitten)
  • LoyaltyHint auf Event-Detailseite: Infobox unterhalb der Ticket-Auswahl
  • LoyaltyCheckModal auf /events: "Mein Punktestand ansehen"-Button öffnet Modal — Auswahl Login oder E-Mail-Lookup, Punktestand + Euro-Wert direkt im Modal (via createPortal)
  • /events-Seite: fetchEvents() + fetchFeaturedSlots() um Loyalty-Felder erweitert (Prisma-select + mapping) — Badge auch für Featured- und Grid-Cards
  • 1 Punkt = 0,10 € Rabatt beim Checkout
AP1
Mai 2026

Sprint AP1Addon-PDF-Integration & Checkout-UX

  • Addons auf PDF-Tickets: gebuchte Extras ("GEBUCHTE EXTRAS") erscheinen auf dem Ticket-PDF direkt unter dem Sitzplatz-Block — Name linksbündig, Preis rechtsbündig, "inkl." bei Preis 0
  • TicketPDFParams erweitert: addons-Feld (Array mit name + price) — beide PDF-Routen (by-id + by-code) befüllen es aus TicketOrderAddon.unitPrice (Preis zum Kaufzeitpunkt)
  • Ticket-Design-Editor (/organizer/ticket-design): JSX-Canvas-Vorschau zeigt Addon-Block mit zwei Demo-Einträgen (Sektempfang + Artist Meet & Greet)
  • PDF-Vorschau (/api/organizer/ticket-design/preview): Demo-Addons in der generierten Vorschau-PDF
  • Checkout-Addon-Beschreibungen: von truncate auf line-clamp-2 + leading-relaxed umgestellt — Beschreibungen bis zu zwei Zeilen lesbar, kein hartes Abschneiden mehr
  • Seed-Demo-Daten: 3 neue Events für The Legends Entertainment GmbH — Galerie Nacht, Symphonie unter Sternen, Theater-Gala — je 4 Addons (Garderobe, Parkplatz, Getränk, Custom)
  • Demo-Events im Seed-Skript idempotent — Addons werden nur angelegt wenn Event neu erstellt wird, keine Duplikate bei erneutem Seeden
B3
Mai 2026

Sprint B3BUGLIST3 — TypeScript-Enum-Migration & 50 Fixes

  • PostgreSQL-native Enums: SupportTicketStatus, SupportTicketPriority, SupportTicketSystem — konvertiert von String-Feldern via manueller SQL-Migration (USING-Cast, Default-Drop/-Restore-Sequenz)
  • Prisma-Enum-Imports in 6 API-Dateien: bulk, customers, system, support/tickets, admin/stats, api-handler — vollständig typsichere Enum-Verwendung
  • Ungültige Enum-Werte bereinigt: "pending" und "waiting" in admin/stats durch in_progress, waiting_for_customer, waiting_for_organizer ersetzt
  • OrganizerSupporter Composite-Unique: @@unique([userId, organizerId]) statt @unique userId — Prisma-Relation aus api-handler.ts entfernt (kein 1-to-1 Backlink mehr)
  • adminRole nullable: users.admin_role — NOT NULL-Constraint + Default entfernt, kein leerer String für Standard-User
  • 5 Performance-Indexes: assigned_supporter_id, updated_at, organizer_id+status, ticket_system+status (support_tickets), created_at (support_messages)
  • Emoji → Lucide SVG: app/support/page.tsx + tls-support/my-requests/new/page.tsx — alle CATEGORIES-Icons auf LucideIcon-Komponenten umgestellt (Ticket, RotateCcw, QrCode, Calendar, CreditCard, MessageCircle, Wrench)
37
Mai 2026

Sprint 37Support-System — Unassigned-Queue & Claim-Funktion

  • Vollständiges zweistufiges Support-System: Kunden-Support (HMAC-Token, ohne Account) + Organizer-Support (TL-Supporter-Portal)
  • TL-Supporter-Portal (/tls-support/*): eigenes JWT, eigenes Login, Dashboard, Ticket-Queue, Einzel-Ticket mit Nachrichten + interne Notizen
  • Unassigned-Queue im Supporter-Dashboard: Live-Liste aller offenen, nicht zugewiesenen Tickets — sortiert nach Priorität und Eingangszeit
  • "Mir zuweisen" Button pro Ticket: 1-Click-Claim setzt assignedSupporterId + Status → in_progress, Erfolgs-Feedback mit Checkmark, Row verschwindet nach 1,2s
  • API GET /api/tls-support/tickets/unassigned: bis zu 30 Tickets ohne assignedSupporterId (status: open | unassigned) — zugänglich für tl_supporter + admin
  • API POST /api/tls-support/tickets/customers/[id]/claim: atomare Zuweisung des aufrufenden Supporters — 409 wenn bereits vergeben
  • UnassignedQueue-Komponente auch im Admin-Dashboard sichtbar — Admins können ebenfalls Tickets direkt übernehmen
  • Ticket-Link in der Queue direkt klickbar — Supporter können Ticket-Detail öffnen ohne zu claimen
  • Admin: TL-Supporter CRUD, SLA-Konfiguration (First-Response / Resolution), Incidents, Audit-Log, Stats-Dashboard
  • Browser-Push für Support-Benachrichtigungen (VAPID), Bulk-Aktionen (Close/Assign/Tag max. 100), Vollsync (Super-Admin)
  • Öffentliche Status-Page (/support/status), Bewertungs-Seite (/support/rate), DSGVO-Cron (monatlich, 365 Tage)
36
Mai 2026

Sprint 36Organizer-eigener Kiosk + Addons + Gerät-Einstellungen

  • Organizer-eigener Kiosk: Jeder Veranstalter erhält eine eigene Kiosk-URL (/kiosk/[slug]) mit individuellem Namen und PIN-Schutz
  • Kiosk-Einstellungen im Organizer-Dashboard: Slug, Name, PIN setzen/ändern/entfernen, Anzeige-Modus (alle Events / ein Event)
  • Anzeige-Modus "Nur ein Event": Organizer pinnt ein Event — Kiosk springt direkt zum Ticket-Kauf, kein Auswahlscreen
  • kioskEventId auf OrganizerProfile (Prisma): pinned Event — Kiosk-Events-API liefert mode: single | all
  • Gerät-lokaler Event-Override: Jedes Tablet kann im Settings-Panel ein eigenes Event auswählen (localEventId, localStorage) — eine Kiosk-URL, mehrere Tablets mit unterschiedlichen Events
  • Erweiterte Gerät-Einstellungen (localStorage, kein Reload): forceFullscreen, inactivityTimeout (Auto-Redirect), language (de/en), forcePayMethod (all/cash/card), autoPrint, receiptCopies (1/2), kioskLabel, localEventId
  • forcePayMethod: Kartenzahlung oder Barzahlung am Gerät erzwingen — andere Option verschwindet im Checkout, Badge "von Kiosk vorgegeben"
  • Inaktivitäts-Timer: Nach konfigurierten Sekunden Inaktivität automatisch zur Kiosk-Startseite zurück — Reset bei Maus/Touch/Tastatur
  • Bluetooth-Drucker-Suche: Web Bluetooth API scannt nach EPSON-, Bixolon-, TM-*, SRP-*-Geräten — Gerätename wird übernommen
  • Drucker-Modell als Serie: TM-T20 Serie, TM-T82 Serie, TM-T88 Serie, TM-m30 Serie, Bixolon SRP-350 Serie etc. statt Einzelmodelle
  • Kiosk-Nav im Organizer-Dashboard: "Kiosk" unter Technik-Gruppe in der Sidebar ergänzt
  • Addons im Kiosk: Wenn das Event Add-ons konfiguriert hat, werden diese nach der Ticket-Auswahl angezeigt (+/- Stepper, Kategorie-Badge, Verfügbarkeit)
  • Footer zeigt "X Tickets + Y Extras" und Gesamtpreis — Addons fließen in den Betrag ein
  • Neue Checkout-Seite [slug]/[eventSlug]/checkout: Routing-Fix (war falscher Pfad), liest Addons aus URL-Params, zeigt separate Extras-Sektion
  • bar-order API: multi-item (items[]) + addons[] — backward-kompatibel, atomare Transaktion mit TicketOrderAddon-Einträgen, sold-Decrement für Addons
  • Debug-Modus: Bon-Druckvorschau — Quittung mit QR-Code, jetzt auch Addon-Zeilen auf dem Bon
  • PIN-Schutz: SHA-256-gehashter PIN in DB, 10 Fehlversuche / 15 Min Brute-Force-Schutz, 8h Cookie je Organizer-Slug
35
Mai 2026

Sprint 35Multi-Provider vollständig — PayPal + Mollie in allen Flows

  • PayPal + Mollie vollständig in allen Checkout-Flows gleichgestellt mit Stripe: Online-Checkout, POS, Kiosk, Season Pass, Bundle
  • 117 Bugs behoben — umfassender Provider-Bugfix-Zyklus aller Zahlungspfade
B4
Mai 2026

Sprint B4Vollsystem-Sicherheits-Audit (99 Bugs)

  • Session-Invalidierung bei Passwort-Änderung: passwordChangedAt-Check in staffHandler ergänzt (war bisher fehlend — Staff-Tokens blieben nach Passwort-Reset gültig)
  • Sitzplan-TOCTOU-Race-Condition: seatReservation nun via $transaction atomisch — deleteMany expired → updateMany own → createMany new, P2002 gibt 409 zurück
  • EventReview: @@unique([eventId, buyerEmail]) — mehrfache Bewertung pro E-Mail + Event verhindert
  • Schicht-Validierung: PATCH prüft startTime/endTime cross-field (effectiveStart/effectiveEnd), staffUserId auf Organizer-Ownership geprüft
  • Staff-Offline-Cache: Cursor-Paginierung (PAGE_SIZE = 5000) — kein Timeout bei großen Events mehr
  • Orders-API: Pagination mit Gesamtanzahl-Count — Response-Shape {orders, total, page, limit} statt bare Array
  • StatusBadge "Erstattet" (refunded) fehlte — lila Badge-Eintrag ergänzt
  • Rate-Limiting: 2FA-, Register- und Forgot-Password-Endpunkte mit DB-basiertem Rate-Limiter abgesichert
  • IP-Spoofing-Schutz: x-forwarded-for Header-Validierung im Rate-Limiter (kein Header-Stacking)
  • Season-Pass: Überverkauf-Fix via atomarem Decrement in $transaction statt Read-Modify-Write
  • Upgrade-Payment: Ticket-Typ-ID validiert vor Zahlungsauslösung, verhindert Upgrade auf fremde Tickets
  • Analytics-Heatmap: DB-level Aggregation via $queryRaw statt In-Memory-Processing (kein OOM-Risiko)
  • BUGLIST.md: 52 Bugs — BUGLIST2.md: 47 Bugs — 99 insgesamt behoben ✅
34
Mai 2026

Sprint 34Anti-Scalping & Storno-Policy

  • Anti-Scalping: transferAllowed Flag pro Ticket-Typ — Transfer komplett deaktivierbar
  • Anti-Scalping: maxTransfers pro Ticket-Typ (Standard: 1) — Weiterverkaufs-Limit
  • Anti-Scalping: maxPerEmail pro Ticket-Typ — Käufer-Cap pro E-Mail-Adresse in allen 4 Checkout-Wegen
  • Anti-Scalping: isPersonalized Flag — Staff-Scanner zeigt Amber-Banner "Ausweis prüfen!" beim Check-in
  • QR-Invalidierung bei Transfer: randomBytes(16).toString("hex") als neues QR → altes Ticket sofort ungültig
  • Staff-Checkin-Lookup auf DB-Feld qrCode (statt String-Parsing) — robuster, kein itemId-Fehler mehr
  • Storno-Policy pro Event: cancelAllowed, cancelDeadlineDays, cancelRefundPercent im Event-Wizard (Step 5)
  • Partielle Rückerstattung Stripe: amount in Cent, refund_application_fee: false (Plattformgebühr bleibt)
  • Partielle Rückerstattung PayPal: amount + currency_code in Capture-Refund-API
  • Partielle Rückerstattung Mollie: amount-Objekt (currency + value) in Payments Refund-API
  • Staff-Invite-Accept-Flow vollständig implementiert (/accept-invite/[token]/page.tsx)
33
Mai 2026

Sprint 33Profil-Redesign & Sicherheit

  • /organizer/profile mit 6-Tab-Sidebar: Profil, Zahlungen, Ticket-Design, Dokumente, Sicherheit, Konto
  • Amber-Dot auf Dokumente-Tab wenn Organizer nicht verifiziert
  • isVerified-Amber-Banner im Organizer-Portal mit direktem Link zum Dokumente-Tab
  • Dokument-Upload: PDF/JPG/PNG bis 10 MB via Vercel Blob — OrganizerDocument-Modell in DB
  • Dokument-Review im Admin: Approve/Reject mit Notiz, Audit-Log, isVerified-Flag wird gesetzt
  • PayPal OAuth Signed Cookie: state:organizerId als httpOnly Cookie paypal_oauth_state — CSRF-Schutz
  • refund_failed-Status: Rückerstattungsfehler landen in dediziertem Fehlerzustand statt silent fail
  • Admin Refund-Retry: POST /api/admin/orders/[id]/refund-retry für Stripe/PayPal/Mollie
B2
Mai 2026

Sprint B2Hotfix B2 — 30 Bugs behoben

  • Organizer-Audit Runde 1 (10 Bugs): atomarer Check-in-Guard, fehlende entryPoint-Validierung, hardcodierter Status, Date-Validation, Stripe-Callback Null-Check, atomic Guestlist Counter
  • Organizer-Audit Runde 1 (forts.): Co-Organizer-Scope fix, DELETE-Guard für bezahlte Bestellungen, PUT Date-Validation, duplicate saleStart beim Duplizieren
  • Organizer-Audit Runde 2 (6 Bugs): publish needsReview Query fix, cancel-Idempotenz, useCallback deps (stale closures), connectToast Tab-Sync, activeTab URL-Init, Mollie Organizer-Token
  • Admin-Audit Runde 1 (8 Bugs): Inventar-Restore-Quantity, /100-Division auf Decimal-Feldern in 7 Dateien (Preise in Euro, nicht Cent!), audit-log FK-Fehler, 2FA-Gate für Activity-Radar
  • Admin-Audit Runde 2 (6 Bugs): Fraud-Threshold-Logik, fehlende Audit-Logs (fee/tier/pauseSales/toggleFeatured), Existence-Checks, useCallback deps, fehlender Refund-Retry-Endpunkt
  • Event-Cancel Idempotenz: mehrfaches Absagen löst keinen zweiten Refund-Durchlauf aus
  • Duplicate-Event saleStart/saleEnd fix: Kopie übernimmt korrekte neue Verkaufsdaten
32
Mai 2026

Sprint 32Plattform-Abrechnung (GoBD)

  • lib/billing.ts: generateMonthlyInvoice, PDF on-demand via pdfkit, Stornorechnung §14 UStG
  • lib/dunning.ts: 4 Mahnstufen (Erinnerung → Mahnung 1+2 → Sperrung), Flat Fees €5/10/15
  • §288 BGB Verzugszinsen (9 Prozentpunkte über Basiszinssatz) + Entsperrgebühr €25
  • DATEV SKR03 CSV-Export — GoBD-konform, Buchungszeilen pro Rechnung
  • OSS-Bericht §3a UStG — aufgeschlüsselt nach EU-Land
  • Offene-Posten-Aging: 6 Buckets (0–7, 8–14, 15–30, 31–60, 61–90, 90+ Tage)
  • Buchhalter-Portal /accounting: Quick-Menu ⋯ pro Zeile, Live-Unternehmenssuche, PDF-Download
  • Zahlungseingang erfassen (Methode + Referenz), Fälligkeits-Erinnerungs-Cron 3 Tage vor dueDate
31
Mai 2026

Sprint 31Buyer-Dashboard & Ticket-Logo

  • QR-Modal mit Multi-Ticket-Navigation (← →) + Checked-in-Overlay
  • Apple Wallet (.pkpass) & Google Wallet Buttons direkt in Ticket-Card
  • PDF-Download Button in Ticket-Card
  • Logo-Upload im Ticket-Editor (Vercel Blob + PDF-Rendering via pdfkit)
  • Account-Seite: DSGVO-Datenexport (Art. 20), Account-Löschung (Art. 17)
  • History-Seite: vollständige Bestellhistorie mit Status-Badges
  • Bestellnummer-Format TL-EVT-2026-A3F9B7 (Präfix + Initialen + Jahr + 6 hex)
  • PDF-Barcode-Fix: Barcode-Rendering im 3-Segment-A4-Layout korrigiert
30
Mai 2026

Sprint 30UX-Qualität & Stabilität

  • Veranstalter-Kontaktformular auf Event-Detailseite — direkter Kanal zum Organizer
  • Nachrichten-Postfach /organizer/inquiries mit Ungelesen-Badge
  • Border-Radius Design-Tokens halbiert (schärferes, professionelleres Look & Feel)
  • SSE-Stream stabilisiert — kein Closed-Controller-Fehler mehr bei langen Verbindungen
29
Mai 2026

Sprint 29Admin Intelligence

  • Revenue Forecasting: lineare Regression über Verkaufsdaten, Trendprojektion 30/60/90 Tage
  • Conversion-Rate-Tracking: Event-Aufrufe → Käufe, Trichteranalyse
  • Fraud-Heuristik ML-Scoring (0–100): E-Mail-Pattern, Velocity, IP-Reputation, Bestellwert
  • Auto-Rescore aller pending Orders nach Flag-Änderung
  • Sponsor-Portal: Token-basierter Read-only-Zugang für Sponsoren
  • PDF-Berichte: Umsatz, Fraud-Übersicht, Organizer-Zusammenfassung
  • Feature-Flag Audit-Log: wer hat wann welches Flag geändert
  • Rate-Limiting per API-Key, DSGVO-Anonymisierungs-Cron (24 Monate), Auto-Incident-Erkennung
28
April 2026

Sprint 28Checkout Add-ons

  • Optionale Extras im Checkout: Garderobe, Parkplatz, Getränk, Custom
  • Alle 4 Zahlungswege (Stripe, PayPal, Mollie, Kiosk) unterstützen Add-ons
  • Eigenes Kontingent pro Add-on-Typ
  • QR-Code pro gebuchter Add-on-Einheit für Check-in
  • Smart Delete: Add-on-Löschen nur möglich wenn kein bezahlter Bestand existiert
  • Lila Add-on-Zeilen in Bestätigungs-E-Mail
HB
Mai 2026

Sprint HBOrganizer-Handbuch — 10-seitige Dokumentation

  • 10-seitiges HTML-Benutzerhandbuch live unter /docs/organizer
  • Erste Schritte: Registrierung, Profil, alle 3 Zahlungsanbieter Schritt für Schritt erklärt
  • Events verwalten: 6-Schritt-Wizard, Duplizieren, Absagen, alle Unterseiten
  • Tickets & Preise: Ticket-Typen, Early-Bird, Flash-Sale, Promo-Codes, Design
  • Staff & Einlass: Einladen, Scanner-App, Einlasspunkte, Schichtplanung
  • Analysen, Serien/Pässe/Merchandise, POS & Vorverkauf dokumentiert
  • Webhooks, Integrationen, REST-API, Co-Organizer, Profil & Einstellungen
  • Design System Light Mode nach DESIGN.md umgesetzt (Plus Jakarta Sans, Farb-Token)
B1
Mai 2026

Sprint B1Hotfix B1 — 24 Bugs behoben

  • Race Condition im POS-Verkauf: atomischer DB-Update via $executeRaw verhindert Überverkauf
  • Cron-Endpunkte mit CRON_SECRET-Auth gesichert (Bearer-Header-Validierung)
  • adminHandler: Sicherheitslücke — gelöschter User mit gültigem JWT erhielt super_admin-Rechte
  • QR-Code-Generierung vollständig lokal (qrcode npm) — kein externer API-Aufruf mehr, DSGVO-konform
  • POS-Storno: soldQty in Outlet-Allokation wird beim Storno korrekt zurückgebucht
  • posOutletId auf TicketOrder gespeichert, damit Storno die richtige Allokation aktualisiert
  • URL-Parameter-Extraktion via params statt pathname.split() in allen Routen
  • Allocations-Route: Kontingent-Kürzung unter soldQty geblockt, DELETE gibt 404 wenn nichts gefunden
  • Prisma-Schema: fehlende Relation PosOutletAllocation → TicketEvent und Index ergänzt
27
Mai 2026

Sprint 27Preiszonen & Zone-Tabs

  • Preiszonen-Panel pro Event im Sitzplan-Editor (Farbe, Name, verknüpfter Tickettyp)
  • Tickettyp-Verknüpfung: Zone zeigt automatisch Live-Preis aus dem verknüpften Tickettyp
  • Zone-Tabs auf Käufer-Sitzwahl-Seite für schnelle Navigation zwischen Preisbereichen
  • Ticket-Typ-Name aus Zonen-Verknüpfung in Warenkorb, Checkout und auf dem Ticket
  • Reihen-Suffix-Feld im Block-Erstellen-Dialog
  • Zone-Selector direkt im Block-Erstellen-Dialog verfügbar
  • Sitzplätze als Rechtecke (rx=3) statt Kreise, Hover-Stroke statt Scale-Animation
26
April 2026

Sprint 26Sitzplan-Editor Pro — Template-Bibliothek & Ebenen

  • Eigenständige Template-Bibliothek — Sitzpläne event-übergreifend speichern und wiederverwenden
  • Reihen-Rotation mit HitTest-Fix für korrekte Klick-Zielerfassung bei rotierten Reihen
  • Ebenen-Panel mit Drag & Drop Umsortierung aller Elemente
  • Duplizieren von Elementen und Gruppen
  • Sitzblock-Assistent: Schnell-Erstellung von Sitzblöcken mit Reihen und Sitzplatz-Konfiguration
  • Gruppierung mehrerer Elemente zu wiederverwendbaren Einheiten
25
März 2026

Sprint 25Einlasspunkte, POS-Outlets & E-Mail-Integrationen

  • Einlasspunkt-Verwaltung: mehrere Eingänge pro Event mit Ticket-Typ-Zuweisung
  • Brandliste: gebannte Käufer per E-Mail, Scanner gibt sofortiges Feedback
  • Produktions-Timeline mit Smart-Links und Aufgaben-Board
  • POS-Outlets: Vorverkaufsstellen-Verwaltung mit Kontingent-Allokation pro Ticket-Typ
  • Custom SMTP für Organizer — eigener Absender für alle Event-E-Mails
  • Mailchimp-Integration: automatischer Käufer-Sync nach Kauf mit Tag-System
  • Brevo-Integration: identischer Sync-Mechanismus wie Mailchimp
  • Schichtplanung: Timeline-Ansicht, Farb-Rollen, PDF-Export, Staff-Zuweisung
24
März 2026

Sprint 24Co-Organizer, Season Pass, Timed Entry, Affiliate

  • Co-Organizer: Token-basierte Einladung ohne Account, granulare Permissions
  • Season Pass: Organizer-Verwaltung, öffentliche Kaufseite, QR-basierter Einlass
  • Timed Entry: Einlass-Zeitfenster pro Ticket-Typ mit Scanner-Feedback bei Zu-früh/Zu-spät
  • Affiliate-Programm: Link-Generierung, Provisions-Tracking, Affiliate-Dashboard
  • Käufer-Herkunft: Top-10 Städte + Länder-Aufteilung in Analytics
  • Staff-Portal: Eigene Schichten einsehen
23
Mai 2026

Sprint 23Co-Organizer, Schichtplanung, Season Pass, Timed Entry

  • Co-Organizer-Rollen: Token-basierte Einladung mit granularen Permissions (view/checkin/staff/tickets/event/full)
  • Schichtplanung: Timeline-Ansicht mit Farb-Rollen, PDF-Export, Staff-Zuweisung
  • Season Pass: Organizer-Verwaltung, öffentliche Kaufseite, QR-basierter Einlass
  • Timed Entry: Einlass-Zeitfenster pro Ticket-Typ, Scanner-Feedback bei Zu-früh/Zu-spät
  • Käufer-Herkunft: Top-10 Städte + Länder-Aufteilung in Analytics
  • Staff-Portal: Eigene Schichten einsehen
  • Co-Organizer-Dashboard: permissions-basierte Ansicht ohne Account
20
Mai 2026

Sprint 20Organizer Quick-Wins, Early-Bird, Flash-Sale, Merchandise

  • Konfigurierbare Reminder (7d/24h/2h) + Post-Event-Mail + NPS-Abfrage
  • Early-Bird-Preise + Flash-Sale mit automatischer Preisberechnung
  • Live-Dashboard während Event (Echtzeit, mobil-optimiert)
  • Eigene AGB + Foto-Einwilligung + Datenschutz-Link pro Event
  • Gebühren-Kalkulator, Umsatz-Prognose, Verkaufsverlauf-Chart
  • Staff-Briefing-Seite, Aufgaben-Board, Kostenplan pro Event
  • Wetter-Widget (Open-Meteo), Spotify-Playlist-Link, Instagram-Share-Cards
  • VIP-Reservierungs-Links, Re-Entry-Kontrolle, Altersverifikation beim Scan
  • Massen-Storno mit Auto-Refund, Event-Verschiebung mit Storno-Window
  • Merchandise-Bundle (Verwaltung + Zuweisung pro Event)
  • Post-Event-Umfrage, DSGVO-Auskunft-Tool, Öffentliche Organizer-Profilseite
  • Web Push Notifications (Verkaufs- und Kapazitäts-Alarme)
19
Mai 2026

Sprint 19Visueller Sitzplatz-Editor

  • Drag & Drop SVG-Editor: Reihen, Zonen, Bühne, Tische, Säulen/Objekte
  • Pan/Zoom, Undo/Redo (30 Snapshots), Virtualisierung ab 500 Elementen
  • Farb-Zonen-System mit Preis-Vererbung
  • Interaktive Käufer-Sitzwahl mit 10-Min Reservierung
  • Echtzeit-Verfügbarkeit via Server-Sent Events
  • Sitzplatz-Info in QR-Code, PDF und Check-in-Scanner
  • Touch/Pinch-Zoom für mobile Käufer-Ansicht
18
April 2026

Sprint 18Kassensystem, Kiosk & Kontingent-Allokation

  • POS-Adapter-Bibliothek: Gastronovi, orderbird, Square (HMAC-Signaturvalidierung)
  • Kiosk-Modus: PIN-Schutz, Touch-UI, Karten- + Barzahlung, QR-Bestätigung
  • Abendkassen-Ticket via Public API (source: pos → direkt paid)
  • Kanal-Kontingent-Allokation pro Ticket-Typ (online/pos/kiosk/api)
  • API-Code-Beispiele in Docs (cURL / JavaScript / Python)
  • Demo-Reset per Admin-Button (superAdminHandler)
17
April 2026

Sprint 17Download-Center, Reviews, Fee-Override, Cmd+K

  • Download-Center: Leitfäden, Musterverträge, Logos für Organizer
  • Review-System: Käufer-Bewertungen + Admin-Moderations-Queue
  • Plattform-Fee-Override pro Organizer und pro Event (3-stufige Hierarchie)
  • Verifizierungs-Stufen: none / verified / premium / trusted + Badge-Komponente
  • Dokument-Upload: Gewerbeschein, Personalausweis + Admin-Prüf-Queue
  • Cron-Status-Dashboard mit Laufzeit-Tracking
  • Cmd+K Global-Suche (⌘K / Ctrl+K) mit Tastatur-Navigation
  • Uptime-Historie: 24-Stunden-Raster mit Hover-Tooltip
16
März 2026

Sprint 16Webhook-Adapter, E-Mail-Templates, FAQ, Warteliste, Widget

  • Webhook-Adapter: pretix + Eventbrite (HMAC-SHA256, Order-Mapping)
  • E-Mail-Template-Editor mit {{variable}}-Interpolation + HTML-Vorschau
  • FAQ-Bibliothek mit Kategorien + Sortierung
  • Warteliste-Management: Beitritt, Benachrichtigung, Admin-Dashboard
  • Organizer-Scoring: Aktivitäts- + Compliance-Score
  • Activity-Radar: SSE-basierter Live-Feed aller Plattform-Ereignisse
  • SEO-Manager: Meta-Daten pro Event (title, description, og:image)
  • Embeddable Widget: Script + iframe, Domain-Whitelist, Embed-Code-Generator
15
März 2026

Sprint 15Admin-Rollen, Status-Page, Sponsoren, Feature-Flags, Fraud

  • Admin-Rollen: super_admin / support_admin + superAdminHandler
  • Öffentliche Status-Page (/status) mit Incident-Management
  • Sponsoren & Partner-Management
  • Dynamische Feature-Flags (Admin-Toggle, 30s Cache, A/B-Split)
  • Fraud-Detection: Score-Berechnung, Auto-Block, Admin-Review-Queue
  • Demo-Banner + Demo-Organizer-Seed
14
Februar 2026

Sprint 14API-Keys, Promo-Codes, E-Mail-Logs, Audit-Log

  • API-Key-Management: Erstellen, Rotieren, Sperren mit Scopes
  • Promo-Codes: Prozentual + absolut, Einzel- oder Mehrfachnutzung
  • E-Mail-Log: gesendete / fehlgeschlagene Mails mit Detail-Ansicht
  • Audit-Log: alle Admin-Aktionen mit Zeitstempel + IP
  • Steuer-Export CSV (19% MwSt-Aufschlüsselung)
  • Changelog & Release-Notes im Admin
13
Februar 2026

Sprint 13Admin-Command-Center, CMS, Analytics

  • Command-Center Dashboard: Actionable Items, Tages-KPIs, Events-Timeline
  • Notification-Center / Admin-Inbox
  • Globale Admin-Suche
  • Finance-Dashboard: MRR-Chart, Fee-Umsatz, CSV-Export
  • CMS: Landing-Page-Blöcke, Legal-Pages, Tags
  • Plattform-Analytics: Registrierungen, Orders, Ticket-Typen, Geo
12
Januar 2026

Sprint 12Accessibility, Bundle-Tickets, Loyalty, Events-Redesign

  • Accessibility-Kontingent mit Begleitpersonen-Freiticket
  • Presse-Akkreditierungs-Workflow
  • Bundle / Festival-Pass (mehrere Events, ein Ticket)
  • Loyalty-Programm: Punkte, Stufen, Rewards
  • Erweiterte Analysen II: Geo, Heatmap, Monatsvergleich
  • Events-Page-Redesign
11
Dezember 2025

Sprint 11Guest-List, Upgrade, Warteraum, Kombi-Tickets

  • Gästeliste-Management: Import CSV, manueller Eintrag, Check-in
  • Ticket-Upgrade: atomare Kontigent-Tausch-Logik
  • Virtueller Warteraum bei überlasteten Events
  • Kombi-Tickets: Ticket + Add-on (Garderobe, Getränk)
  • Erweiterte Analysen I
10
Dezember 2025

Sprint 10Apple/Google Wallet, Transfer, Resale

  • Apple Wallet (passkit-generator): .pkpass-Generierung
  • Google Wallet (google-auth-library): JWT Pass-Generierung
  • Ticket-Transfer zwischen Käufern
  • Kontrollierter Resale-Marktplatz mit Preisdeckel
9
November 2025

Sprint 9Externe REST-API, Webhooks, Organizer-API

  • Öffentliche REST-API v1: Events, Orders, Check-in, Tickets
  • OpenAPI-Spec (Swagger UI unter /docs/api)
  • Ausgehende Webhooks: ticket.sold, checkin.scanned, event.cancelled
  • HMAC-SHA256-Signatur für Webhook-Sicherheit
  • Organizer-API: Events + Bestellungen per API-Key abfragen
8
November 2025

Sprint 8Multi-Currency, Steuer-Einstellungen, Reseller

  • Multi-Currency-Support
  • Steuer-Konfiguration pro Event (inkl. / exkl. MwSt)
  • Reseller-Programm mit Provisions-Tracking
  • Offline-First Check-in (IndexedDB-Cache)
7
Oktober 2025

Sprint 7Refunds, Stornierungen, Capacity Management

  • Refund-Flow via Stripe / PayPal / Mollie
  • Admin-Storno mit Bestätigungs-Flow
  • Kapazitäts-Watchlist: ≥80%-Warnung
  • Pending-Order-Cleanup Cron
6
Oktober 2025

Sprint 6Organizer-Portal, Ticket-Design, Events-Management

  • Vollständiges Organizer-Portal
  • Ticket-Design-Editor: 4 Templates, Akzentfarbe, PDF-Vorschau
  • Event-Wizard: mehrstufig, Cover-Upload, Lineup, Dresscode
  • Promo-Codes, Preis-Kategorien, Tages-Kontingente
5
September 2025

Sprint 5Staff-System, Invite-Links, Check-in-Scanner

  • Staff-Invite via E-Mail-Link
  • Staff-Portal mit QR-Scanner (html5-qrcode)
  • Offline-Cache für Check-in (IndexedDB)
  • Geräte-Zertifikat-System
4
September 2025

Sprint 4Stripe Connect, PayPal, Mollie

  • Stripe Connect: Payment Intent + Webhook
  • PayPal Commerce Platform: create/capture/cancel
  • Mollie Connect: create-payment + Webhook
  • Unified Payment Interface in lib/payment.ts
3
August 2025

Sprint 3Ticket-Kauf, PDF, QR-Code, E-Mail

  • Ticket-Bestellflow: Auswahl → Checkout → Bestätigung
  • PDF-Generierung via pdfkit (3-Segment A4)
  • QR-Code-Generierung (qrcode npm)
  • Barcode (jsbarcode)
  • Bestätigungs-E-Mail mit PDF-Anhang (Nodemailer)
2
August 2025

Sprint 2Auth-System, JWT, E-Mail-Verifikation

  • Eigenständiges JWT-System (bcrypt + jsonwebtoken)
  • E-Mail-Verifikation + Passwort-Reset
  • Role-Guards: admin / organizer / staff / buyer
  • Admin-Freigabe für neue Organizer
  • TOTP 2FA (Authenticator-App)
1
Juli 2025

Sprint 1Grundstruktur, Prisma, Events-API

  • Next.js 15 App Router + TypeScript-Grundstruktur
  • Prisma ORM + PostgreSQL (eigene Supabase-Instanz)
  • Öffentliche Events-API
  • Organizer-Registrierung + Landing Page
tl-tickets · tickets.thelegends.net