



Max Weigel rüstet Industriebetriebe mit Arbeitsschutz aus. Der B2B-Shop liegt hinter dem Login und zeigt jedem Monteur nur sein eigenes Sortiment. Gebaut haben wir ihn mit Medusa und einer Next.js-Storefront, betrieben wird er per Docker auf eigenem Server. Dazu kommen Ausgabenlimits pro Mitarbeiter, Kauf auf Rechnung und eine Bestellmail, die die Sage-Warenwirtschaft direkt weiterverarbeiten kann.
Headless-Shop mit Medusa im Backend und einer Next.js-Storefront, selbst gehostet per Docker, dazu die durchgehend deutsche Oberfläche in Shop und Admin. Katalogimport aus der Warenwirtschaft, Firmen- und Mitarbeiterverwaltung, Bestellbenachrichtigung mit CSV-Anhang für Sage sowie automatisierte Tests in der CI.
Ein geschlossener Shop, in dem jeder Monteur nur die Artikel seiner Warengruppe sieht. Der Einkäufer legt Mitarbeiter, Budgets und Kostenstellen selbst an, ohne Rückfrage beim Lieferanten.
Preise laufen netto, die Mehrwertsteuer wird separat ausgewiesen. Bezahlt wird ausschließlich auf Rechnung, eine Versandauswahl und eine Selbstregistrierung gibt es bewusst nicht. Kein Tracking, keine Analytics, nur technisch notwendige Cookies.



Im B2B ist der Katalog selten ein Angebot an alle. Welche Artikel ein Kunde bekommt und zu welchen Konditionen, steht in einer Vereinbarung, und diese Vereinbarung gilt für ihn und nicht für den nächsten. Ein offener Shop müsste diese Unterschiede verstecken, obwohl sie der eigentliche Inhalt sind. Es ist deshalb naheliegend, den Shop gar nicht erst zu öffnen.
Das klingt einfacher, als es sich baut. Ein geschlossener Bereich ist nur so dicht wie seine schwächste Stelle, und die liegt selten dort, wo man zuerst hinsieht. Die Produktseite selbst ist meist schnell abgesichert. Übrig bleiben die Nebenwege: eine Navigation, die Warengruppen schon im Menü verrät, eine Suche, die auf Zuruf antwortet, eine Sitemap, die Adressen aufzählt, ein Suchindex, der eine Seite von letzter Woche noch vorhält.
Für Max Weigel läuft die Absicherung deshalb auf mehreren Ebenen und nicht an einer. Eine Prüfung im Request-Pfad leitet alles außer den wenigen öffentlichen Seiten auf die Anmeldung. Navigation und Fußzeile blenden Warengruppen und Suche ohne Anmeldung ganz aus, damit nicht die Struktur des Sortiments verrät, was der Katalog nicht verraten soll. Und der Shop stellt sich per noindex und robots.txt aus dem Index, weil ein geschlossenes System in einer Suchmaschine nichts zu gewinnen hat. Konten legt ausschließlich Max Weigel an, eine Selbstregistrierung gibt es nicht.
Die Monteure, die bei Max Weigel bestellen, arbeiten in unterschiedlichen Bereichen. Wer Multinorm-Schutzkleidung braucht, hat mit Warnschutz nichts zu tun, und umgekehrt. Ein gemeinsamer Katalog würde beide Gruppen durch Artikel führen, die für sie nicht vorgesehen sind. Das ist kein Komfortproblem, sondern eine Fehlerquelle: falsch bestellte Schutzkleidung schützt nicht.
Die Trennung läuft deshalb über Kundengruppen und nicht über Rechte am einzelnen Artikel. Jede Gruppe hat ihre Warengruppen, ein kleiner geteilter Bestand wie Zubehör und Shirts bleibt für alle sichtbar. Zugewiesen wird das bei der Einladung, es entsteht also kein zweiter Pflegeort. Fehlt einem Konto die Zuordnung, sieht es das vollständige Sortiment statt keines. Diese Richtung ist bewusst gewählt: ein zu großer Katalog ist ein Ärgernis, ein leerer Shop ein Ausfall.
Dazu kommen Ausgabenlimits pro Mitarbeiter mit wählbarem Zyklus, von täglich bis jährlich. Der Einkäufer setzt sie selbst, sieht den Verbrauch als Balken im Konto und braucht dafür niemanden beim Lieferanten. Geprüft wird die Grenze auf dem Server beim Abschluss der Bestellung, nicht nur in der Oberfläche. Eine Regel, die nur im Frontend steht, ist keine Regel, sondern eine Bitte.
Eine Bestellung im Shop ist erst dann eine Bestellung, wenn sie im System des Händlers ankommt. Bei Max Weigel entstehen Rechnung und Lieferschein in Sage, der Shop ist die Erfassung davor. Zwischen beiden liegt eine Lücke, die klassisch mit Abtippen geschlossen wird, und Abtippen ist der Punkt, an dem Artikelnummern zu Zahlendrehern werden.
Jede Bestellung erzeugt deshalb eine Benachrichtigung mit einem fertigen CSV-Anhang: Artikelnummer, Bezeichnung, Variante, Menge, Nettopreise, dazu Bestellnummer, Besteller, Firma, Kundennummer und Kostenstelle. Die Datei ist auf den Import ausgelegt und nicht auf das Auge, mit Semikolon, CRLF und Byte Order Mark, damit Excel die Umlaute nicht zerlegt. Die Kostenstelle wird dabei in einer festen Reihenfolge aufgelöst, erst die Eingabe im Checkout, dann die feste Kostenstelle des Mitarbeiters.
Eine echte Schnittstelle zu Sage wäre der nächste Schritt, sie war für diesen Stand bewusst nicht der erste. Eine Live-Anbindung verlangt einen Vertrag über Feldnamen und Fehlerfälle, und den kann man führen, während der Shop schon läuft. Der Zwischenstand kostet einen Import pro Bestellung und nimmt dafür das Nachtippen und die Rückfragen aus dem Weg. Abgesichert ist die Erzeugung dieser Datei durch Tests, wie überhaupt die kritischen Regeln des Shops: Rollenprüfung, Ausgabenlimit, Einladungen. Mehrere dieser Tests sind nach einem konkreten Vorfall entstanden und stehen genau deshalb dort.
Schreiben Sie uns oder buchen Sie direkt ein Erstgespräch. Wir antworten innerhalb von 24 Stunden, werktags meist schneller.