Projekt
Eine Warenwirtschaft, zweimal gebaut
Warenwirtschaft für Handel über mehrere Kanäle: Lieferantenkataloge, Preisbildung, Marktplätze, Rechnungswesen, Regulatorik — ohne Framework, in zwei Instanzen.
Nicht weil Standardsoftware schlecht wäre
Sondern weil der Zuschnitt nicht passte: Handel über mehrere Kanäle mit sechsstelligen Artikelmengen, Lieferantenkatalogen, eigener Preisbildung, Produktrecht und Buchhaltung — in einem Betrieb, in dem niemand eine Woche auf ein Ticket warten kann. Das erste mediakiss entstand dafür Stück für Stück: 40 Fachbereiche über anderthalb Jahrzehnte, von der Kasse über Werkstattaufträge bis zu Provisionen und Zeiterfassung.
Irgendwann kam ein gewachsenes System nicht mehr mit — erkennbar, und zwar vor dem Zusammenbruch. Das zweite mediakiss ist ein Neubau mit derselben Handschrift auf anderer Grundlage: kein Framework, ein eigener Kern, mandantenfähig von der ersten Zeile an.
Der Kern besteht aus Router, Datenbankschicht, Rechteverwaltung, Migrationslauf und einer Oberfläche, die im Browser wie ein Arbeitsplatz mit mehreren Fenstern funktioniert — weil Sachbearbeitung nun einmal parallel läuft und nicht in einem einzigen Tab stattfindet.
Die einzigen fremden Bausteine sind ein Mailversender, ein PDF-Erzeuger, eine Tabellenbibliothek und eine Vorlagensprache. Das ist Absicht: Jede Abhängigkeit, die man nicht hat, kann auch nicht in drei Jahren zum Sicherheitsproblem werden.
173.285
Zeilen PHP
Eigener Code des Warenwirtschaftssystems mediakiss: src/, public/, bin/, cron/, db/ und config.php. Inklusive Kommentar- und Leerzeilen, ohne Composer-Abhängigkeiten. erhoben 05.09.2026
29
Fachmodule
Verzeichnisse unter src/Modules/ — je Modul ein abgeschlossener Fachbereich von Auftragsabwicklung bis Buchhaltung. erhoben 05.09.2026
277
Automatisierungen
117 zeitgesteuert, 160 auf Zuruf
117 zeitgesteuerte Läufe unter cron/ und 160 Kommandozeilenwerkzeuge unter bin/. Die Werkzeuge laufen auf Zuruf, nicht dauerhaft. erhoben 05.09.2026
681.655
Artikel im Katalog
aus 24 Lieferantenkatalogen zusammengeführt
Datensätze in der Artikeltabelle, über alle Bezugsquellen hinweg. erhoben 05.09.2026
24
Lieferanten angebunden
49 Preislistenprofile
Verschiedene Lieferanten in den Bezugsquellen; 49 Importprofile für deren Preislisten und Kataloge. erhoben 05.09.2026
2
Instanzen im Betrieb
getrennte Datenbanken, ein Code
Zwei produktive Installationen desselben Codes unter verschiedenen Adressen, je mit eigener Datenbank und Konfiguration. erhoben 05.09.2026
Vom Lieferantenkatalog bis zur Buchhaltung
Oben der Weg der Ware durch das System, unten die drei Schichten, die jeden Schritt tragen. Nichts davon wird von Hand nachgetragen.
- 01
Kern ohne Framework
Router, Datenbankschicht, Rechte, Migrationslauf, Fenster-Oberfläche. Alles, was ein Framework mitbrächte, ist hier bewusst selbst geschrieben und deshalb vollständig bekannt.
- 02
Fachmodule
29 Module decken die Kette ab: Aufträge, Lager, Einkauf, Versand und Packtisch, Retouren, Gebrauchtware, Kunden, Lieferanten, Tickets, Rechnungswesen, Bank, Liquidität, Regulatorik, Systemverwaltung.
- 03
Lieferanten-Importe
Preislisten und Kataloge per FTP, SFTP, HTTP und Mail; schema-fest, weil ein Lieferant seinen Export ohne Ankündigung um Spalten erweitert. Stammdaten werden einmal befüllt und nie mehr überschrieben.
- 04
Preisbildung
Gegen beobachteten Wettbewerb je Kanal, mit Untergrenze aus Einstand, Gebühren und Versand. Sichtbarkeit vor Maximalmarge — solange kein Verlust entsteht.
- 05
Marktplatz-Anbindungen
Angebote, Bestände, Bestellungen, Tickets und Abrechnungen je Kanal. Für eine der Schnittstellen musste die digitale Signatur von Anfragen selbst gebaut werden — fertige Bibliotheken gab es nicht.
- 06
Rechnungswesen
Abrechnungsdaten je Kanal einlesen, Gebühren zuordnen, Bankzeilen erzeugen, gegen Ausgangsrechnungen abgleichen, in die Buchhaltung exportieren — erst nachdem ein Mensch die Zeilen gesichtet hat.
- 07
Eingangsrechnungen
PDF oder strukturierte E-Rechnung, erkannt, geprüft, auf Doppelungen gemessen, abgelegt. Was unklar ist, bleibt liegen — billiger als ein falscher Beleg im System.
- 08
Regulatorik
Pflichtangaben über 112.832 Artikel: Vorschlag durch Agenten oder Regel, unabhängige Nachrechnung, Freigabe durch einen Menschen.
- 09
Mandantenfähigkeit
Kein betriebsspezifischer Wert im Code — Adressen, Zugänge, Lieferantennamen, Pfade stehen in 453 Konfigurationsschlüsseln. Eine neue Instanz heißt: Werte setzen, Migrationen laufen lassen.
- 10
Änderungsjournal
854 dokumentierte Änderungen, jede mit Risikostufe und Rollout-Anleitung. Der unbeliebteste Teil der Arbeit und der wichtigste: ohne ihn driften Installationen in Monaten auseinander.
- 11
KI-Jobs
Produkttexte, Klassifikation, Preisfreigaben — mit Schreiber und unabhängigem Prüfer, fail-closed. Ein Ausfall des Modells ist kein fachliches Ergebnis.
- 12
Agenten-Fassaden
Lese- und Vorschlagswerkzeuge für die Agenten-Plattform. Was ein Agent schreibt, landet als Antrag — die Freigabe im Panel ist die einzige Schranke, und sie ist keine Prompt-Anweisung.
Was angebunden ist
Kanäle
- Kaufland
- eBay
- Amazon
- Shopware 6
Lieferanten
- ITScope
- Icecat
- Ingram Micro
- Wortmann
- Herweck
- ENO
- BAB
- Komsa
- Kosatec
- Avides
Dienste
- lexoffice
- DHL
- PayPal
- FritzBox
- EPREL
- Google Merchant
- OpenAI-Feed
- Odoo
Technik
- PHP 8.3
- MariaDB
- nginx
- PDO
- PHPMailer
- Cron
- MCP
Drei Vorfälle, die Regeln wurden
-
01
Aufbewahrung gehört zur Tabelle
Die Preishistorie wuchs unbemerkt, bis ein einziger Aufräumlauf 723,5 Mio. Zeilen entfernen musste — in gut fünf Stunden, ohne Betriebsunterbrechung. Seitdem entsteht die Aufbewahrungsregel zusammen mit der Tabelle, nicht danach.
Lehre: Ein Job, der sich selbst beschäftigt, kostet bei dieser Größenordnung innerhalb von Tagen sichtbar Geld. Messen statt vermuten →
-
02
Eine Sicherung, die nicht zurückgespielt wurde, ist keine
Der Datenbank-Sicherungslauf war über Wochen still gescheitert — nicht an einer Ursache, sondern an fünf gleichzeitig, jede für sich harmlos. Seitdem gilt: destruktive Datenbankarbeit erst, wenn der letzte Sicherungslauf nachweislich grün war.
Lehre: Ein grüner Haken ist eine Selbstauskunft. Am Artefakt prüfen →
-
03
Stammdaten, die sich gegenseitig überschreiben
Siebzehn Importprofile schrieben dieselben Felder — Bezeichnung, Hersteller, Herstellernummer — und jeder Lauf machte den vorigen rückgängig: über tausend Titelwechsel am Tag, und daraus falsch zusammengesetzte Angebote. Seitdem werden diese Felder einmal befüllt und nie mehr überschrieben.
Lehre: Zwei Jobs, die dasselbe Feld schreiben, brauchen eine Reihenfolge — oder einer von beiden darf es nicht. Ein KI-Job braucht einen Zustand, in dem er fertig ist →
Vier Baustellen, nach Priorität
Preisfreigabe nach Regel
Gesperrte Einkaufspreise werden nach einer Regel-Matrix wieder freigegeben statt nach Modellurteil — und lieferantenspezifisch, weil die Fehlerquote am Lieferanten hängt, nicht an der Größe des Sprungs.
Produkttexte, die Grenzen kennen
Der Prüfer fängt erfundene Zahlen zuverlässig, unbelegte Wirkungsaussagen noch nicht. Die Kennzahl misst die falsche Fehlerart — das wird umgebaut.
eBay an die Pflichtangaben
Als einziger Kanal bezog eBay die Energieklasse teils aus fremden Angeboten. Der Injektor läuft im Schattenbetrieb und protokolliert, was er ändern würde.
Liquidität aus den Belegen
Erwarteter Zufluss je Marktplatz aus Rechnungen und Auszahlungsberichten — mit Klärfall-Grenze, damit Stornos ohne Gutschrift nicht als Geld zählen.
Dazu gehört
- ProjektTechFluxx & Vulpano — Handel mit IT, Elektronik und Bürobedarf über Kaufland, eBay, Amazon und den eigenen Shop vulpano.de — vollständig aus der Warenwirtschaft gespeist.
- ProjektMediazehe — Warenwirtschaft, Shop, Odoo-Anbindung und ein eigener Agenten-Mandant für einen Telekom-Partner mit zwei Standorten.
- ProjektOlymp — Agenten-Plattform mit Zuständigkeiten, Rechtestufen und Freigaben — je Mandant getrennt, Modelle lokal und in der Cloud.
- ThemaE-Commerce & Marktplätze
- ThemaRegulatorik & Datenqualität
- ThemaKI-First