«Ich möchte einen Onlineshop von Grund auf neu» heißt meist «Ich möchte einen Shop, der das kann, was Vorlagen nicht können». Und was Vorlagen nicht können, ist fast immer dasselbe: mit dem Hersteller, dem Versender und dem Zahlungsdienst zu sprechen, ohne dass jemand Daten von einem Bildschirm auf den anderen abtippt. Dieser Artikel erklärt, wie wir diese Arbeit in fünf Schichten gliedern, was jede enthält und in welcher Reihenfolge sie gebaut werden. Die Beispiele stammen von eclipseando.com, einem eigenen Shop von uns im Produktivbetrieb, und von den Zusteller-Konnektoren, die wir für Odoo veröffentlicht haben.
Kerngedanke: Das Frontend ist die sichtbarste und zugleich die am wenigsten riskante Schicht. Geld geht in den drei mittleren verloren: bei einer Kasse, die sich austricksen lässt, bei Daten, die an zwei Orten liegen, und bei einem Lieferanten, dem Bestellungen von Hand weitergegeben werden. Gebaut wird von innen nach außen.
Die fünf Schichten eines Shops
| Schicht | Was sie enthält | Typischer Fehler, wenn man sie überspringt |
|---|---|---|
| 1 · Daten | Katalog, Preise, Bestand, Aufträge, Kunden. Eine einzige verlässliche Datenquelle. | Der Preis im Web und der Preis im ERP laufen nach zwei Monaten auseinander. |
| 2 · Kasse | Warenkorb, Preis- und Versandberechnung, Zahlungsgateway, Zahlungsbestätigung per Webhook. | Man verlässt sich auf die Dankeseite und bereitet eine Bestellung vor, die nie bezahlt wurde. |
| 3 · Lieferanten | Hersteller, Lager, Zusteller: Ausgangsbestellung, Etikett, Sendungsverfolgung, Störfälle. | Die Sendungsverfolgung wird von Hand kopiert und erreicht den Kunden, wenn überhaupt, einen Tag zu spät. |
| 4 · Geplante Aufgaben | Warteschlangen, Wiederholversuche, Postfachabruf, Bestandsabgleich, Erinnerungen. | Eine E-Mail, die in einer Nacht fehlschlägt, geht für immer verloren. |
| 5 · Frontend | Seiten, Produktseiten, Suche, Sprachen, Geschwindigkeit, SEO. | Man fängt hier an, zeigt etwas Schönes, und die anderen vier werden danach improvisiert. |
Schicht 1: Die Daten liegen an einem einzigen Ort
Bevor man einen Bildschirm entwirft, muss feststehen, wo der Katalog liegt. Hat der Kunde Odoo, lautet die Antwort Odoo: Produkte, Preise, Bestand und Aufträge sind dort, und die Website liest sie, statt sie zu kopieren. Hat er es nicht, braucht der Shop eine eigene Datenbank, und sie sollte klein und unspektakulär sein. Bei eclipseando.com ist es SQLite, in einer Datei, mit Datensicherung. Es darf nicht passieren, dass der Preis auf der Website, in einer Tabellenkalkulation und im ERP steht: Nach zwei Monaten sind es drei verschiedene Preise.
Schicht 2: Die Kasse vertraut dem Browser nicht
Zwei Regeln, über die wir nicht verhandeln. Erstens: Der Preis wird auf dem Server berechnet, mit dem aktuellen Katalog, in dem Moment, in dem die Zahlungssitzung erstellt wird. Der Browser darf den Warenkorb speichern, aber nicht bestimmen, was er kostet. Zweitens: Eine Bestellung gilt als bezahlt, wenn das Gateway sie per signiertem Webhook bestätigt, nicht wenn der Kunde auf der Dankeseite landet. Bei Stripe ist das checkout.session.completed mit verifizierter Signatur; andere Gateways nennen es anders, die Idee ist dieselbe. Und schlägt beim Eingang des Webhooks der nächste Schritt fehl, antwortet man mit einem Fehler, damit das Gateway es erneut versucht, und speichert die Sitzungs-ID, um nichts doppelt zu fertigen.
Schicht 3: Jeder Lieferant spricht so, wie er kann
Hier hört «Logistikanbindung» auf, ein Schlagwort zu sein, und wird zur Arbeit. Ein Lieferant mit API und Webhook (eine Druckerei auf Abruf, ein großer Zusteller) wird in beide Richtungen angebunden: Beim Bezahlen wird ihm die Bestellung angelegt, und seine Meldung «versendet» wird abgehört, um die Sendungsverfolgung an den Kunden weiterzugeben. Einer mit Dropshipping-API wird in eine Richtung angebunden und in der anderen abgefragt: vor dem Bezahlen die tatsächliche Verfügbarkeit pro Land, danach die Bestellung. Und einer ohne API, von denen es viele gibt, wird angebunden, indem die menschliche Arbeit auf einen Klick reduziert wird: Das System erzeugt genau die E-Mail oder CSV-Datei, die der Lieferant braucht, und wenn seine Pakete mit einem Zusteller versendet werden, der E-Mails schickt, werden diese E-Mails gelesen und in Status umgewandelt.
Zwei Details, die man nur mit echten Bestellungen lernt. Erstens: Die Sendungsverfolgung läuft pro Sendung, nicht pro Bestellung, denn eine Bestellung mit zwei Produkten von zwei Lieferanten sind zwei Pakete. Zweitens: Die Lieferzeiten aus der Dokumentation des Lieferanten sind nicht die, die er einhält; man misst sie, indem man Testbestellungen anlegt und liest, was zurückkommt, und genau diese Zeiten zeigt man dem Kunden vor der Zahlung. Ist der Lieferant ein Zusteller und der Shop läuft mit Odoo, ist all das in den von uns veröffentlichten Zusteller-Konnektoren bereits gelöst: Etikett, Sendungsverfolgung, Manifest und Retoure direkt im Lieferschein.

Schicht 4: Was von selbst läuft und was wiederholt wird
Ein Shop hat Arbeiten, die nicht davon abhängen dürfen, dass jemand daran denkt: die E-Mail-Warteschlange leeren, bezahlte Bestellungen erneut senden, die nie beim Lieferanten ankamen, das Postfach des Zustellers lesen, den Bestand mit Marktplätzen abgleichen. Jede davon ist eine geplante Aufgabe mit Intervall und Protokoll. Die Entwurfsregel lautet, dass keine von ihnen im Pfad einer Benutzeranfrage einen externen Dienst aufruft: Die Seite liest, was die Aufgabe im Cache hinterlassen hat. Fällt der Lieferant um drei Uhr nachts aus, liefert der Shop so weiter Seiten aus, und die Bestellungen werden erneut versucht, sobald er zurück ist.
Schicht 5: Das Frontend, am Ende und schnell
Sind die vier unteren Schichten gelöst, ist das Frontend der dankbarste Teil. Wir bevorzugen statische Seiten, die beim Build erzeugt und von nginx oder Caddy ausgeliefert werden (Astro bei eclipseando.com): Sie laden blitzschnell, haben keine Datenbank, die man angreifen könnte, und kosten so viel wie ein kleiner Server. Das Dynamische (Warenkorb, Zahlung, Bestellstatus) läuft über eine separate API. Mehrsprachigkeit wird mit einer URL pro Sprache und eigenen Texten umgesetzt, nicht mit einem automatischen Übersetzer obendrauf, und mit Tests abgesichert, die prüfen, dass jede Vorlage in allen Sprachen existiert. Und die Geschwindigkeit wird vor der Veröffentlichung gemessen: Seitengewicht, Bilder in der Größe, in der sie dargestellt werden, nichts, was das erste Rendering blockiert.
Die Reihenfolge zählt: von innen nach außen
Der teuerste Fehler, den wir sehen, ist, mit Schicht 5 anzufangen. In der zweiten Woche wird eine schöne Website gezeigt, der Kunde freut sich, und die Schichten 1 bis 4 werden darunter in Eile improvisiert. Das Ergebnis funktioniert bis zur ersten Bestellung mit zwei Lieferanten oder bis zum ersten verlorenen Webhook. Wir bauen umgekehrt: zuerst Daten und Kasse mit ihren Tests, dann die Anbindungen mit echten Testbestellungen, dann die geplanten Aufgaben, und das Frontend zuletzt, wenn genau feststeht, was es zeigen muss. Es dauert genauso lang. Man muss deutlich weniger neu machen.
Häufige Fragen
Wann lohnt es sich, den Shop von Grund auf zu entwickeln, statt Shopify oder Odoo Website zu nutzen?
Wenn der Wert in dem liegt, was die Plattform nicht mitbringt: eine eigene Berechnung, Anbindungen an Lieferanten ohne Konnektor, ein Katalog, der kein Katalog ist. Ist Ihr Shop ein normaler Katalog mit einem normalen Zusteller, ist eine Plattform günstiger und die richtige Antwort. Wir führen das in wann man die Website auf Odoo Website baut und wann nicht aus.
Was ist mit einem Lieferanten ohne API?
Er wird trotzdem angebunden, über einen anderen Kanal: Das System erzeugt per Klick genau die E-Mail oder CSV-Datei, die er braucht, und liest, was der Lieferant oder sein Zusteller per E-Mail zurückschickt. Das ist nicht so sauber wie eine API, aber es beseitigt das manuelle Kopieren, und dort passieren die Fehler.
Und wenn ich schon Odoo habe?
Dann gibt es die Schichten 1, 3 und 4 größtenteils schon: Katalog und Aufträge liegen in Odoo, die Zusteller kommen über veröffentlichte Konnektoren herein, und die geplanten Aufgaben sind die Crons des ERP selbst. Gebaut werden das Frontend und, falls nötig, eine individuelle Kasse, die mit dem Verkauf verbunden ist.
Nützliche Links bei FlexigoTech
Was wir dazu machen
Haben Sie einen Shop im Kopf, der in keine Vorlage passt?
Erzählen Sie uns, was Sie verkaufen, wer es herstellt und wer es versendet. Wir schicken Ihnen die fünf Schichten zurück, mit dem, was in jede gehört, und in welcher Reihenfolge. Schreiben Sie an comercial@flexigobe.com oder rufen Sie an unter +34 616 809 504.

