Karuselle
Ein mehrsprachiger Marktplatz für kuratierte Second-Hand-Designermode: semantische Suche, flexible Verkäuferprovisionen, EU-Steuermeldungen und neue Zahlungsmethoden auf einer wachsenden Laravel-Codebasis.

Aufgabe
Ein mehrsprachiger Mode-Marktplatz mit vielen Verkäufern und mehreren externen Vertriebskanälen musste auf einer alternden Codebasis weiterwachsen: intelligentere Suche, faire und flexible Provisionen, EU-Steuermeldungen, mehr Zahlungsmethoden – und ein Shop, der schnell und sicher bleibt.
Lösung
Drei Jahre als einziger Entwickler:
- Framework-Upgrade: Laravel 5.8 → 6 → 7 → 8 → 9 → 10 → 11 mit allen Paketen und PHP 7.4 → 8.x in zwei Wochen, dazu ein Umzug auf einen neuen Server.
- Semantische Suche in vier Sprachen: ein selbst gehosteter Embedding-Dienst und eine Vektordatenbank, inkrementelle Index-Synchronisierung über Queues, Fallback auf die einfache Suche mit Circuit Breaker, ein Schalter im Admin-Bereich ohne Deploy, ein deterministischer Filter für Farbe/Kategorie/Material, Synonyme und Diagnosebefehle.
- Katalog und Shop-Frontend: Live-AJAX-Filter in Schubladen mit Trefferzahlen, Umrechnung von Größen in EU- und länderspezifische Größensysteme, Rabatt- und Verkäuferfilter, SEO-freundliche URLs, ein komplettes Redesign von Karten, Header, Footer und Mega-Menü, Banner und Slider auf der Startseite per Drag-and-drop verwaltet.
- Preisvorschlag: Kunden schlagen einen Preis vor, der Admin antwortet per E-Mail mit einem Gegenangebot – auch für Gäste –, mit Limits pro Person, Ablaufzeit und Schutz vor Doppelklicks.
- Checkout und Zahlungen: Käuferschutzgebühr in Warenkorb, Checkout, E-Mails und Rechnungen mit Umsatzsteuer; Gutscheine, länderabhängiger Versand; Stripe mit 3D Secure, Apple Pay und Google Pay, PayPal REST, Paysera mit Betragsprüfung.
- Verkäufer und Geld: Vertriebskanäle mit eigenen Provisionen und Rechnungen, eine eigene Rechnung pro Verkäufer innerhalb einer Bestellung, Auszahlungstermine für Verkäufer, ein EU-DAC7-Steuerbericht in XML, Rechnungsnummern, vergeben unter einer Datenbanksperre, und ein Modul Commission Rules mit einem einzigen Resolver, Sätzen pro Kanal, Regeln nach Alter des Angebots, Vorschau, Sortierung per Drag-and-drop und Änderungsprotokoll.
- Feeds und Marketing: Google Merchant, Facebook, Partner-Marktplätze per CSV, E-Commerce-Synchronisierung mit Mailchimp, Consent Mode v2.
- SEO und GEO: strukturierte Daten für Produkte, Breadcrumbs und FAQ, canonical und hreflang nur für vorhandene Übersetzungen, noindex für Facetten, robots-Regeln für KI-Crawler und llms.txt, eine tägliche Sitemap und ein Befehl für SEO-Prüfungen.
- Sprachen: LT, EN, PL und RU mit Übersetzung beim Speichern und wöchentlichen Synchronisierungsbefehlen.
- Admin-Bereich und Betrieb: Panels für Queues und Jobs mit Worker-Heartbeat, Exporte im Hintergrund, Sitzungswiederherstellung, die eingegebenen Text behält, Bereinigung verwaister Produktentwürfe.
- Sicherheit: Ein Security-Review schloss Lücken bei Zugriffskontrolle und Dateizugriff, führte Login-Drosselung pro Konto und pro IP ein, beendet Sitzungen bei Passwortänderung und beschränkte die Typen hochgeladener Dateien.
- Tests: eine Testsuite von null auf 239 Tests, mit Schutz davor, sie in Produktion auszuführen.
Ergebnis
- Provisionsberechnung für 50 Produkte: von 101 Datenbankabfragen auf 2.
- Liste der Preisvorschläge: 169 → 121 Abfragen pro Seite; ein Produkt mit 35 Vorschlägen: 92 → 64.
- Produkt-Thumbnails: je 136 KB → 20 KB (60 pro Kategorieseite); die Bilder eines Produkts 2,5 MB → 0,5 MB.
- Die Verkäufererlöse in der Verkaufshistorie zeigen jetzt, was tatsächlich berechnet wurde – ein Fehler, der die meisten historischen Zeilen betraf, wurde gefunden und behoben.
- Die semantische Suche deckt in Produktion rund 9.000 Produkte ab.