Zum Inhalt springen
online
dev0.46.1 · 1d135e2
Aktiv

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.

Startseite von Karuselle: ein kuratierter Wiederverkäufer von Designermode mit einem Vollbildfoto einer silbernen Handtasche, einem „Sell with us“-Button, Menüs nach Marke und Kategorie, Suche und einem Sprachumschalter

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.

Screenshots