[{"data":1,"prerenderedAt":916},["ShallowReactive",2],{"blog-headless-product-configurator-b2b-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":13,"about":24,"sources":31,"cover":58,"og":59,"expertise":60,"locales":61,"lang":63,"title":65,"description":66,"coverAlt":67,"metaTitle":68,"takeaways":69,"faq":75,"toc":94,"blocks":131,"others":628},"headless-product-configurator-b2b","2026-10-02",12,"web",[9,10,11,12],"Product configurator","B2B e-commerce","Nuxt","Headless commerce",[14,15,16,17,18,19,20,21,22,23],"B2B product configurator","Produktkonfigurator","Produktkonfigurator TYPO3","B2B Konfigurator","headless product configurator","CPQ configure price quote","rule engine vs constraint solver","Nuxt Spryker Glue API","product configurator 100000 variants","accessible product configurator",[25,27,29],{"name":9,"url":26},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_configurator",{"name":12,"url":28},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_commerce",{"name":11,"url":30},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNuxt",[32,34,37,40,43,46,49,52,55],{"title":33,"url":26},"Wikipedia: Knowledge-based configuration (product configurator)",{"title":35,"url":36},"Google OR-Tools: The CP-SAT solver","https:\u002F\u002Fdevelopers.google.com\u002Foptimization\u002Fcp\u002Fcp_solver",{"title":38,"url":39},"Spryker documentation: Glue API, Product Configuration feature integration","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fscos\u002Fdev\u002Ffeature-integration-guides\u002F202108.0\u002Fglue-api\u002Fglue-api-product-configuration-feature-integration.html",{"title":41,"url":42},"OWASP: Input Validation Cheat Sheet","https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FInput_Validation_Cheat_Sheet.html",{"title":44,"url":45},"web.dev: Virtualize large lists","https:\u002F\u002Fweb.dev\u002Farticles\u002Fvirtualize-long-lists-react-window",{"title":47,"url":48},"W3C: Understanding SC 3.3.1 Error Identification (WCAG 2.2)","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Ferror-identification.html",{"title":50,"url":51},"W3C: Understanding SC 4.1.3 Status Messages (WCAG 2.2)","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Fstatus-messages.html",{"title":53,"url":54},"W3C: Understanding SC 2.5.8 Target Size (Minimum) (WCAG 2.2)","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Ftarget-size-minimum.html",{"title":56,"url":57},"W3C WAI-ARIA Authoring Practices: Combobox pattern","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FARIA\u002Fapg\u002Fpatterns\u002Fcombobox\u002F","\u002Fimages\u002Fblog\u002Fheadless-product-configurator-b2b\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fheadless-product-configurator-b2b\u002Fog.jpg","b2b-ecommerce-developer",[62,63,64],"en","de","hu","Headless B2B-Produktkonfigurator: Regeln, Preise und Nuxt auf einer Commerce-API","So baust du einen B2B-Produktkonfigurator headless: Regelwerk oder Solver, wo Regeln liegen, Preise auf dem Server, Nuxt auf Commerce-API, TYPO3, 100k+ Varianten.","Diagramm: Ein Nuxt-Frontend spricht mit einem Konfigurationsdienst, der Regeln aus dem PIM und Preise aus dem ERP liest und eine validierte Konfiguration an die Commerce-API übergibt.","Headless B2B-Produktkonfigurator Guide · Balázs Csorba",[70,71,72,73,74],"Behandle den Konfigurator als kleinen Dienst mit drei Aufgaben (was erlaubt ist, was es kostet, was der Shop zum Verkauf braucht), nicht als Frontend-Widget mit eingebauten Regeln.","Starte mit einem deklarativen Regelwerk; greife erst zu einem Constraint-Solver, wenn Regeln so stark zusammenhängen, dass du gültige Kombinationen nicht aufzählen oder einen Konflikt nicht erklären kannst.","Regeln gehören dorthin, wo die Produktdaten gepflegt werden (meist das PIM), Preise dorthin, wo sie verantwortet werden (meist das ERP); der Shop erhält nur ein validiertes Ergebnis.","Der Browser darf eine Vorschau zeigen, aber der Server muss beim Warenkorb und beim Angebot erneut validieren und bepreisen, denn clientseitige Validierung lässt sich trivial umgehen.","Bei über 100.000 Varianten lieferst du nie die Variantenliste aus: Du fragst den Server nach den nächsten gültigen Optionen und machst diesen Dialog tastatur- und screenreader-tauglich.",[76,79,82,85,88,91],{"q":77,"a":78},"Was ist ein B2B-Produktkonfigurator?","Ein B2B-Produktkonfigurator führt Einkäufer durch die Wahl einer gültigen Kombination von Optionen für ein konfigurierbares Produkt, etwa Maße, Werkstoffe und Toleranzen, zeigt Preis und Lieferzeit und übergibt das Ergebnis an Warenkorb oder Angebot. Im Vergleich zu Konsumenten-Konfiguratoren sind die Regeln strenger, der Katalog größer und der Preis hängt oft von Vertragskonditionen ab.",{"q":80,"a":81},"Regelwerk oder Constraint-Solver für einen Produktkonfigurator?","Beginne mit einem deklarativen Regelwerk: Es ist leicht zu erklären, zu testen und vom Produktmanagement zu pflegen. Wechsle zu einem Constraint-Solver, wenn Regeln so stark zusammenspielen, dass sich gültige Kombinationen nicht mehr aufzählen oder von Hand ordnen lassen, oder wenn du erklären musst, warum eine Auswahl unmöglich ist, und die nächstgelegene gültige Alternative finden willst.",{"q":83,"a":84},"Wo sollen Konfigurator-Regeln liegen: PIM, ERP oder Shop?","Halte die Regeln bei den Produktdaten, die sie begründen, meist im PIM, und die Preise dort, wo sie verantwortet werden, meist im ERP. Der Shop sollte eine validierte Konfiguration konsumieren, nicht die Regeln besitzen, sonst stehen Regeln doppelt im Shop und im ERP und laufen auseinander.",{"q":86,"a":87},"Wie baut man einen Produktkonfigurator mit TYPO3?","Lass TYPO3 Inhalte, Landingpages und Navigation besitzen und binde den Konfigurator als Headless-App oder als Plugin ein, das mit einem separaten Konfigurationsdienst spricht. TYPO3 übergibt nur Kontext wie Sprache, Kundengruppe und Produktkennung; Regeln, Preise und Validierung bleiben außerhalb des CMS.",{"q":89,"a":90},"Wie geht man mit über 100.000 Varianten in einem Konfigurator um?","Lade und rendere nie alle Varianten. Modelliere das Produkt als Attribute und Regeln, lass den Server nur die Optionen zurückgeben, die für die aktuelle Auswahl noch gültig sind, indexiere durchsuchbare Attribute in einer Suchmaschine, cache die Options-Abfragen und virtualisiere jede lange Liste, die du anzeigen musst.",{"q":92,"a":93},"Wie macht man einen Konfigurator barrierefrei?","Nutze native Formularelemente oder gut getestete ARIA-Muster, kündige Preis- und Validierungsänderungen als Statusmeldungen an, ohne den Fokus zu verschieben, beschreibe Fehler als Text am Feld und halte Klickziele mindestens 24 mal 24 CSS-Pixel groß. Teste den ganzen Ablauf mit Tastatur und Screenreader, nicht nur mit einem automatischen Prüfwerkzeug.",[95,98,101,104,107,110,113,116,119,122,125,128],{"id":96,"title":97},"what-it-does","Was ein B2B-Konfigurator wirklich leisten muss",{"id":99,"title":100},"rule-engine-or-solver","Regelwerk oder Constraint-Solver",{"id":102,"title":103},"where-rules-live","Wo die Regeln liegen: PIM, ERP oder Shop",{"id":105,"title":106},"pricing","Preislogik, ohne sie preiszugeben",{"id":108,"title":109},"nuxt-front-end","Das Nuxt-Frontend auf einer Commerce-API",{"id":111,"title":112},"typo3-cms","Integration mit TYPO3 oder einem anderen CMS",{"id":114,"title":115},"performance","Performance mit über 100.000 Varianten",{"id":117,"title":118},"validation-quotes","Validierung auf dem Server, Speichern und Angebote",{"id":120,"title":121},"accessibility","Barrierefreiheit ist eine Konfigurator-Anforderung",{"id":123,"title":124},"checklist","Eine Checkliste vor dem Go-live",{"id":126,"title":127},"outlook","Was daraus folgt",{"id":129,"title":130},"sources","Quellen",[132,136,150,153,180,187,188,196,211,214,279,282,283,290,293,302,305,328,329,336,339,358,361,362,369,391,409,410,417,420,421,427,463,464,471,478,500,507,508,511,553,556,557,560,579,582,583,586,598,599],{"type":133,"content":134},"paragraph",[135],"Ein Produktkonfigurator sieht nach einem Frontend-Problem aus, bis der erste echte Katalog kommt. Dann zeigt sich: Es ist ein Datenproblem (woher kommen die Regeln?), ein Preisproblem (wer darf sagen, was das kostet?) und ein Vertrauensproblem (kann der Shop genau das verkaufen, was der Kunde konfiguriert hat?). Im B2B, wo eine falsche Kombination das falsche Teil in einer Maschine bedeutet, wiegt Letzteres am schwersten.",{"type":133,"content":137},[138,139,143,144,149],"So würde ich 2026 einen ",{"tag":140,"children":141},"strong",[142],"B2B-Produktkonfigurator"," (ein „CPQ-lite\": konfigurieren, bepreisen, anbieten, ohne die volle CPQ-Suite) headless bauen. Grundlage ist ein geführter Konfigurator für mehr als 100.000 Artikel der Präzisionstechnik mit automatisierter Preisberechnung, gebaut in Nuxt.js auf der Spryker Glue API (siehe ",{"tag":145,"to":146,"children":147},"link","\u002Freferences",[148],"die Meusburger-Referenz","). Der Artikel bleibt bei Architektur und Abwägungen und beschreibt das Projekt darüber hinaus nicht.",{"type":151,"level":152,"id":96,"text":97},"heading",2,{"type":133,"content":154},[155,156,159,160,163,164,167,168,171,172,175,176,179],"Ohne Oberfläche macht ein Konfigurator vier Dinge. Er ",{"tag":140,"children":157},[158],"schränkt"," Auswahlmöglichkeiten ",{"tag":140,"children":161},[162],"ein",", sodass nur gültige Kombinationen erreichbar sind. Er ",{"tag":140,"children":165},[166],"leitet"," Werte ",{"tag":140,"children":169},[170],"ab",", die der Käufer nicht tippen soll (Artikelnummer, Gewicht, Lieferzeit). Er ",{"tag":140,"children":173},[174],"bepreist"," das Ergebnis, oft mit Staffel- oder Vertragspreisen. Und er ",{"tag":140,"children":177},[178],"übergibt"," eine Konfiguration, die der Rest des Unternehmens nutzen kann: eine Warenkorbposition, ein Angebot, eine Zeichnungsanfrage.",{"type":133,"content":181},[182,183,186],"Der typische Fehler ist, alle vier im Frontend zu bauen, weil dort die Demo entsteht. Das Ergebnis sind Regeln, die sich ohne Browser nicht testen lassen, Preise, die der Client sehen und schlimmer noch beeinflussen kann, und ein Shop, der alles glauben muss, was ankommt. Ich würde das System in eine dünne Oberfläche und einen ",{"tag":140,"children":184},[185],"Konfigurationsdienst"," teilen, der die ersten drei Aufgaben besitzt, und die vierte der Commerce-Plattform überlassen.",{"type":151,"level":152,"id":99,"text":100},{"type":133,"content":189},[190,191,195],"Historisch begannen Konfiguratoren mit Produktionsregeln; die danach entstandenen modellbasierten, constraint-basierten Ansätze trennen Produktwissen von der Lösungsstrategie, sodass Änderungen an dem einen das andere nicht beschädigen, wie der ",{"tag":192,"href":26,"children":193},"a",[194],"Wikipedia-Artikel zur wissensbasierten Konfiguration"," beschreibt. Das ist der praktische Punkt: Welche Technik du auch wählst, die Regeln sollten Daten sein, keine Codepfade.",{"type":133,"content":197},[198,199,202,203,206,207,210],"Ein ",{"tag":140,"children":200},[201],"deklaratives Regelwerk"," wertet Bedingungen wie „wenn der Werkstoff X ist, sind Durchmesser über Y nicht erlaubt\" gegen die aktuelle Auswahl aus. Es lässt sich dem Produktmanagement leicht erklären, gut unit-testen (Auswahl rein, erlaubte Optionen raus) und ist schnell. Ein ",{"tag":140,"children":204},[205],"Constraint-Solver"," wie ",{"tag":192,"href":36,"children":208},[209],"OR-Tools CP-SAT"," behandelt das Produkt als Variablen und Constraints und sucht gültige Belegungen; er arbeitet über ganzen Zahlen, Dezimalmaße müssen also skaliert werden. Er glänzt, wenn Constraints so zusammenspielen, dass du sie nicht von Hand ordnen kannst, und wenn du „Was ist die nächstgelegene gültige Konfiguration?\" beantworten willst.",{"type":133,"content":212},[213],"Mein Standard ist das Regelwerk, mit Regeln in einem Format, das später auch ein Solver lesen könnte. Die meisten Katalogprodukte sind eigentlich Familien mit einigen Dutzend zusammenhängenden Parametern, und die Erklärbarkeit einer Regel („diese Option ist wegen Regel 42 gesperrt\") ist dem Support mehr wert als die Allgemeinheit eines Solvers. Die Tabelle ist meine Entscheidungshilfe.",{"type":215,"head":216,"rows":225},"table",[217,219,221,223],[218],"Situation",[220],"Einsatz",[222],"Warum",[224],"Worauf achten",[226,237,247,257,268],[227,229,233,235],[228],"Produktfamilien mit Parameterbereichen und einigen Dutzend Abhängigkeiten",[230],{"tag":140,"children":231},[232],"Regelwerk",[234],"Transparent, testbar, vom Produktmanagement pflegbar",[236],"Regelreihenfolge und überlappende Regeln; deklarativ halten und unit-testen",[238,240,243,245],[239],"Viele zusammenhängende Optionen, keine klare Auswertungsreihenfolge",[241],{"tag":140,"children":242},[205],[244],"Findet gültige Belegungen und Konflikte ohne handgeschriebene Reihenfolge",[246],"Ganzzahlige Modellierung, Antwortzeit, Fehler den Nutzern erklären",[248,250,253,255],[249],"„Nichts ist gültig, was kommt am nächsten?\" muss beantwortet werden",[251],{"tag":140,"children":252},[205],[254],"Kann Constraints lockern und Alternativen suchen",[256],"Braucht ein klares Ziel, was „am nächsten\" heißt",[258,260,264,266],[259],"Überwiegend feste Varianten, Auswahl ist ein Filter",[261],{"tag":140,"children":262},[263],"Facettensuche, keine Engine",[265],"Die Varianten existieren schon als Artikel; filtern und sortieren",[267],"Keinen Konfigurator bauen, wo eine Suchseite reicht",[269,271,275,277],[270],"Regeln gehören Nicht-Entwicklern, die sie wöchentlich ändern",[272],{"tag":140,"children":273},[274],"Regelwerk mit Editor",[276],"Regeln als Daten mit Versionierung und Review",[278],"Governance: Wer darf eine Regel veröffentlichen, wie wird sie getestet",{"type":133,"content":280},[281],"Prüfe vor dem Bauen, ob du überhaupt einen Konfigurator brauchst. Existieren die Varianten als verkaufbare Artikel, ist ein guter filterbarer Katalog billiger und robuster. Ein Konfigurator lohnt sich dort, wo der Kombinationsraum zu groß zum Aufzählen ist oder Werte abgeleitet statt gewählt werden.",{"type":151,"level":152,"id":102,"text":103},{"type":133,"content":284},[285,286,289],"Die Frage, die im zweiten Jahr die Wartungskosten bestimmt, ist nicht die Engine, sondern ",{"tag":140,"children":287},[288],"wem welches Wissen gehört",". Meine Faustregel: Regeln liegen bei den Produktdaten, die sie begründen (typischerweise im PIM), Preise dort, wo sie verantwortet werden (typischerweise im ERP, im Shop gecacht), und der Shop besitzt nie Konfigurationslogik. Ihm gehören Warenkorb, Checkout und Kundenbeziehung.",{"type":133,"content":291},[292],"Die folgende Architektur stellt einen Konfigurationsdienst zwischen das Nuxt-Frontend und die Commerce-API. Der Dienst liest Attribute und Regeln aus dem PIM, Preise und Verfügbarkeit aus dem ERP und liefert Optionen, abgeleitete Werte, Preis und ein Validierungsergebnis. Die Commerce-API erhält nur Konfigurationen, die dieser Dienst validiert hat.",{"type":294,"attrs":295,"inner":299,"caption":300},"diagram",{"viewBox":296,"role":297,"aria-labelledby":298},"0 0 720 350","img","d1-cfg-t d1-cfg-d","\u003Ctitle id=\"d1-cfg-t\">Headless-Konfigurator: wer mit wem spricht\u003C\u002Ftitle>\u003Cdesc id=\"d1-cfg-d\">Ein Nuxt-Frontend sendet die aktuelle Auswahl an einen Konfigurationsdienst, der Regeln aus dem PIM und Preise aus dem ERP liest. Der Dienst liefert gültige Optionen, Preis und abgeleitete Werte. Eine validierte Konfiguration geht an die Commerce-API für Warenkorb und Angebot. Das CMS liefert Inhalte an das Frontend.\u003C\u002Fdesc>\u003Ctext x=\"20\" y=\"28\" class=\"d-title\">Headless-Konfigurator: wer mit wem spricht\u003C\u002Ftext>\u003Ctext x=\"700\" y=\"28\" text-anchor=\"end\" class=\"d-label\">Architekturskizze\u003C\u002Ftext>\u003Crect x=\"20\" y=\"70\" width=\"160\" height=\"76\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"100\" y=\"104\" text-anchor=\"middle\" class=\"d-text\">Nuxt-Frontend\u003C\u002Ftext>\u003Ctext x=\"100\" y=\"125\" text-anchor=\"middle\" class=\"d-small\">Schritte, Vorschau\u003C\u002Ftext>\u003Cpath d=\"M180 108 H277\" class=\"d-line\" \u002F>\u003Cpath d=\"M285 108 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"285\" y=\"70\" width=\"160\" height=\"76\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"365\" y=\"104\" text-anchor=\"middle\" class=\"d-text\">Konfig-Dienst\u003C\u002Ftext>\u003Ctext x=\"365\" y=\"125\" text-anchor=\"middle\" class=\"d-small\">Regeln, Preis, Prüfung\u003C\u002Ftext>\u003Cpath d=\"M445 108 H532\" class=\"d-line\" \u002F>\u003Cpath d=\"M540 108 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"540\" y=\"70\" width=\"160\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"620\" y=\"104\" text-anchor=\"middle\" class=\"d-text\">Commerce-API\u003C\u002Ftext>\u003Ctext x=\"620\" y=\"125\" text-anchor=\"middle\" class=\"d-small\">Korb, Angebot, Kasse\u003C\u002Ftext>\u003Cpath d=\"M300 200 V152\" class=\"d-line\" \u002F>\u003Cpath d=\"M300 146 l-5 9 h10 z\" class=\"d-head\" \u002F>\u003Cpath d=\"M435 200 V152\" class=\"d-line\" \u002F>\u003Cpath d=\"M435 146 l-5 9 h10 z\" class=\"d-head\" \u002F>\u003Crect x=\"240\" y=\"200\" width=\"120\" height=\"56\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"300\" y=\"224\" text-anchor=\"middle\" class=\"d-text\">PIM\u003C\u002Ftext>\u003Ctext x=\"300\" y=\"245\" text-anchor=\"middle\" class=\"d-small\">Attribute, Regeln\u003C\u002Ftext>\u003Crect x=\"375\" y=\"200\" width=\"120\" height=\"56\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"435\" y=\"224\" text-anchor=\"middle\" class=\"d-text\">ERP\u003C\u002Ftext>\u003Ctext x=\"435\" y=\"245\" text-anchor=\"middle\" class=\"d-small\">Preise, Bestand\u003C\u002Ftext>\u003Cpath d=\"M100 200 V152\" class=\"d-line\" \u002F>\u003Cpath d=\"M100 146 l-5 9 h10 z\" class=\"d-head\" \u002F>\u003Crect x=\"20\" y=\"200\" width=\"160\" height=\"56\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"100\" y=\"224\" text-anchor=\"middle\" class=\"d-text\">CMS\u003C\u002Ftext>\u003Ctext x=\"100\" y=\"245\" text-anchor=\"middle\" class=\"d-small\">Inhalt, Kontext\u003C\u002Ftext>\u003Crect x=\"20\" y=\"290\" width=\"680\" height=\"40\" rx=\"10\" class=\"d-box d-dash\" \u002F>\u003Ctext x=\"360\" y=\"315\" text-anchor=\"middle\" class=\"d-small\">Der Server prüft bei Warenkorb und Angebot erneut. Der Browser zeigt nur die Vorschau.\u003C\u002Ftext>",[301],"Der Konfigurationsdienst ist der einzige Ort, der Regeln, Preise und Validierung verbindet. Der Browser zeigt eine Vorschau; die Commerce-API erhält nur validierte Konfigurationen.",{"type":133,"content":303},[304],"Aus dieser Trennung folgen drei Konsequenzen.",{"type":306,"ordered":307,"items":308},"list",false,[309,314,319],[310,313],{"tag":140,"children":311},[312],"Eine Quelle pro Fakt."," Existiert eine Regel im PIM und noch einmal im Shop, ist eine davon binnen eines Quartals falsch. Veröffentliche Regeln aus dem PIM in den Dienst (etwa als versioniertes Artefakt), statt sie neu zu erfassen.",[315,318],{"tag":140,"children":316},[317],"Der Dienst ist zustandslos über einer Auswahl."," Jeder Aufruf trägt die volle Auswahl und den Kontext (Kunde, Preisliste, Sprache). Das macht ihn cachebar, testbar und horizontal skalierbar.",[320,323,324,327],{"tag":140,"children":321},[322],"Der Shop sieht ein Ergebnis, keinen Prozess."," Spryker dokumentiert zum Beispiel ein Product-Configuration-Feature mit Glue-API-Modulen, die Konfigurationsdaten an Warenkorbpositionen tragen (",{"tag":192,"href":39,"children":325},[326],"Spryker-Dokumentation","). Welche Plattform du auch nutzt: Prüfe, wie sie eine Konfiguration an einer Warenkorbposition speichert und ob sie sie bepreisen kann, bevor du ein eigenes Format entwirfst.",{"type":151,"level":152,"id":105,"text":106},{"type":133,"content":330},[331,332,335],"B2B-Preise sind selten eine einzelne Zahl. Sie kombinieren Grundpreis, Optionsaufschläge, Mengenstaffeln, kundenspezifische Vereinbarungen und manchmal Bearbeitungs- oder Rüstkosten. Ich würde die ",{"tag":140,"children":333},[334],"Preisberechnung auf dem Server im Konfigurationsdienst"," halten, als reine Funktion von Auswahl, Menge und Kundenkontext, die das ERP oder die vom ERP gepflegte Preisliste aufruft.",{"type":133,"content":337},[338],"Das Frontend zeigt dann einen Preis, den der Server geliefert hat, und kennzeichnet ihn so. Ändert der Käufer die Menge, frage erneut an. Berechne den Endpreis nie aus Zahlen, die an den Browser geschickt wurden; diese Zahlen sind Eingaben für die Anzeige, nicht für die Bestellung.",{"type":340,"variant":341,"title":342,"body":343},"callout","tip","Preise reproduzierbar machen",[344],[345,346,349,350,353,354,357],"Speichere zu jeder gespeicherten Konfiguration und jedem Angebot die ",{"tag":140,"children":347},[348],"Regelwerk-Version",", die ",{"tag":140,"children":351},[352],"Preislisten-Version"," und die ",{"tag":140,"children":355},[356],"Eingaben"," der Preisfunktion. Wenn ein Kunde drei Wochen später ein Angebot anzweifelt, musst du es neu berechnen oder zumindest erklären können, welche Regeln und Preise galten. Ohne das wird „automatisierte Preisberechnung\" zum Supportproblem.",{"type":133,"content":359},[360],"Zwei praktische Punkte. Erstens: Entscheide früh, ob der Konfigurator einen verbindlichen oder einen indikativen Preis zeigt; brauchen manche Positionen ein manuelles Angebot (Sondertoleranzen, große Mengen), bilde das als ausdrückliches Ergebnis ab („Angebot anfragen\") statt als fehlenden Preis. Zweitens: Halte Rundung, Währung und Steuerregeln an einem Ort, sonst weichen Konfigurator, Warenkorb und Rechnung um Cent ab und du suchst tagelang nach dem Grund.",{"type":151,"level":152,"id":108,"text":109},{"type":133,"content":363},[364,365,368],"Im Frontend würde ich den Konfigurator als ",{"tag":140,"children":366},[367],"geführten Dialog über den Server"," bauen, nicht als clientseitige Zustandsmaschine, die die Regeln kennt. Jeder Schritt sendet die aktuelle Auswahl an den Konfigurationsdienst und rendert die zurückkommenden Optionen, wobei gesperrte Optionen einen Grund tragen. Nuxt passt gut, weil Server-Routen (Nitro) als Backend-for-Frontend dienen können: Der Browser spricht mit deinen eigenen Endpunkten, die ihrerseits Konfigurationsdienst und Commerce-API mit Zugangsdaten aufrufen, die nie den Client erreichen.",{"type":306,"ordered":307,"items":370},[371,376,381,386],[372,375],{"tag":140,"children":373},[374],"Auswahl in der URL."," Kodiere die Auswahl im Query-String, damit sich eine Konfiguration teilen, merken und wiederherstellen lässt. Das macht auch Tests einfach: Eine URL ist ein Testfall.",[377,380],{"tag":140,"children":378},[379],"Servergesteuerte Schritte."," Der Server liefert den nächsten Schritt, die gültigen Optionen und die Gründe für gesperrte. Einen Parameter hinzuzufügen wird zur Datenänderung, nicht zum Release.",[382,385],{"tag":140,"children":383},[384],"Optimistische Vorschau, maßgebliches Ergebnis."," Zeige billiges lokales Feedback sofort, aber behandle die Serverantwort als Wahrheit und gleiche ab.",[387,390],{"tag":140,"children":388},[389],"Übergabe über die Commerce-API."," Am Ende ruft das BFF auf, validiert noch einmal und schreibt die Konfiguration über die Plattform-API (bei Spryker die Glue API) in Warenkorb oder Angebot.",{"type":133,"content":392},[393,394,398,399,403,404,408],"Willst du zusätzlich einen KI-Assistenten, der Käufern hilft zu beschreiben, was sie brauchen („eine Platte für ein Werkzeug, gehärtet, 300 mm\"), lass ihn eine Auswahl vorschlagen und schicke diese durch denselben Dienst. Das Modell schlägt vor, die Regeln entscheiden. Zur Agentenseite siehe ",{"tag":145,"to":395,"children":396},"\u002Fblog\u002Fagentic-commerce-protocols-ucp-acp-guide",[397],"Agentic-Commerce-Protokolle",", und um den Ablauf für Browser-Agenten bereitzustellen, ",{"tag":145,"to":400,"children":401},"\u002Fblog\u002Fwebmcp-agent-ready-website-guide",[402],"WebMCP",". Lieferst du einen Assistenten aus, bewerte ihn wie jedes andere Produktfeature, etwa wie in ",{"tag":145,"to":405,"children":406},"\u002Fblog\u002Fllm-evals-for-product-features",[407],"LLM-Evals für Produktfeatures",".",{"type":151,"level":152,"id":111,"text":112},{"type":133,"content":411},[412,413,416],"Suchen nach „Produktkonfigurator TYPO3\" kommen meist von Unternehmen, die TYPO3 schon für die Marketing-Site betreiben und den Konfigurator darin haben wollen. Das saubere Muster ist eine Arbeitsteilung: ",{"tag":140,"children":414},[415],"Das CMS besitzt Inhalte, Navigation, Landingpages und SEO; der Konfigurator besitzt die Konfiguration."," TYPO3 rendert die Seite und bindet den Konfigurator ein, entweder als eingebettete Nuxt-App oder als Extension-Plugin, das denselben Konfigurationsdienst aufruft.",{"type":133,"content":418},[419],"TYPO3 sollte nur Kontext übergeben: Sprache, Kundengruppe, Kennung der Produktfamilie. Es sollte keine Regeln oder Preise halten. Sobald eine Regel in einem Inhaltselement oder einer TypoScript-Bedingung steckt, kann sie das Produktmanagement nicht testen und finden Entwickler sie nicht mehr. Das gilt für jedes andere CMS und für die Wahl zwischen Einbettung und vollständig headless Frontend: Je mehr der Konfigurator von der Seite besitzt, desto konsistenter das Erlebnis, aber desto mehr gibst du den CMS-Vorschau-Workflow auf, den deine Redakteure mögen.",{"type":151,"level":152,"id":114,"text":115},{"type":133,"content":422},[423,424],"Ein Katalog mit über 100.000 Artikeln verändert, wie du über Performance denkst, weil es keine Liste zu rendern gibt. Das Prinzip ist einfach: ",{"tag":140,"children":425},[426],"Liefere die Variantenliste nie an den Browser aus; frage den Server, was als Nächstes gültig ist.",{"type":306,"ordered":307,"items":428},[429,434,439,444,449,458],[430,433],{"tag":140,"children":431},[432],"Modelliere das Produkt, nicht die Varianten."," Attribute plus Regeln beschreiben den Raum; Varianten werden nur bei Bedarf materialisiert (Artikelnummer, Preis).",[435,438],{"tag":140,"children":436},[437],"Indexiere für den Zugriff."," Durchsuchbare Attribute kommen in eine Suchmaschine, sodass „welche Optionen bleiben?\" eine Index-Abfrage ist, kein Table-Scan.",[440,443],{"tag":140,"children":441},[442],"Cache nach Auswahl."," Options-Abfragen für dieselbe Auswahl und denselben Kontext sind identisch; cache sie am Edge oder im Dienst und schlüssele den Cache nach Regelwerk- und Preislisten-Version.",[445,448],{"tag":140,"children":446},[447],"Halte Payloads klein."," Liefere nur den nächsten Schritt, nicht den ganzen Baum, und komprimiere ihn.",[450,453,454,457],{"tag":140,"children":451},[452],"Virtualisiere, was lang ist."," Braucht ein Schritt wirklich eine lange Liste (etwa hunderte Durchmesser), rendere nur das sichtbare Fenster: ",{"tag":192,"href":45,"children":455},[456],"Virtualisierung"," recycelt DOM-Knoten, die den Viewport verlassen, sodass die Zahl gerenderter Elemente dem Fenster folgt, nicht den Daten.",[459,462],{"tag":140,"children":460},[461],"Miss den ganzen Dialog."," Die Kennzahl ist „Zeit vom Klick bis zu aktualisierten, gültigen Optionen\", p95, einschließlich ERP-Preisabfrage. Budgetiere sie und teste sie mit echten Auswahlen.",{"type":151,"level":152,"id":117,"text":118},{"type":133,"content":465},[466,467,470],"Alles, was der Browser durchsetzt, muss der Server noch einmal durchsetzen. Das ",{"tag":192,"href":42,"children":468},[469],"OWASP Input Validation Cheat Sheet"," sagt klar, dass Eingabevalidierung serverseitig umgesetzt werden muss, weil clientseitige Validierung leicht umgangen wird, und bevorzugt Allow-Lists: genau definieren, was erlaubt ist. Für einen Konfigurator heißt das: Der Server akzeptiert nur Auswahlen, die unter dem aktuellen Regelwerk gültig sind, und berechnet abgeleitete Werte und Preis neu, statt empfangenen zu vertrauen.",{"type":133,"content":472},[473,474,477],"Behandle eine Konfiguration als ",{"tag":140,"children":475},[476],"unveränderliches, versioniertes Dokument",". Eine kompakte Form funktioniert gut:",{"type":306,"ordered":307,"items":479},[480,485,490,495],[481,484],{"tag":140,"children":482},[483],"Identität:"," Konfigurations-ID, Produktfamilie, erstellender Kunde und Zeitstempel.",[486,489],{"tag":140,"children":487},[488],"Auswahl:"," die gewählten Parameterwerte, nichts Abgeleitetes.",[491,494],{"tag":140,"children":492},[493],"Versionen:"," Regelwerk- und Preislisten-Version zum Zeitpunkt der Erstellung.",[496,499],{"tag":140,"children":497},[498],"Ergebnis:"," abgeleitete Werte, Preisaufschlüsselung und die Artikelnummer oder ein Kennzeichen „manuelle Prüfung nötig\".",{"type":133,"content":501},[502,503,506],"Speichern heißt dann, dieses Dokument zu schreiben; ",{"tag":140,"children":504},[505],"Angebot"," heißt, es mit einer Gültigkeitsdauer einzufrieren und mit dem Angebot zu verknüpfen. Wird ein Angebot angenommen, validiere vor der Bestellung gegen die aktuellen Regeln neu: Hat sich zwischenzeitlich eine Regel geändert, sollte der Käufer es erfahren, bevor es die Produktion tut. Ob du das Dokument im Konfigurationsdienst oder auf der Commerce-Plattform hältst, ist zweitrangig gegenüber der Frage, ob es vollständig und wiederholbar ist.",{"type":151,"level":152,"id":120,"text":121},{"type":133,"content":509},[510],"Ein Konfigurator ist ein dichtes, dynamisches Formular, und genau dort bricht Barrierefreiheit meist. Der praktische Grund ist einfach: Ein Käufer, der deinen Konfigurator nicht bedienen kann, kann nicht bestellen. Das sind die Prüfungen, die ich anwende, zugeordnet zu WCAG 2.2:",{"type":306,"ordered":307,"items":512},[513,522,531,539,548],[514,517,518,521],{"tag":140,"children":515},[516],"Sag in Text, was falsch ist."," ",{"tag":192,"href":48,"children":519},[520],"Erfolgskriterium 3.3.1"," verlangt, dass ein Eingabefehler erkannt und in Text beschrieben wird. „Dieser Durchmesser ist mit gehärtetem Stahl nicht verfügbar\" schlägt einen roten Rahmen.",[523,526,527,530],{"tag":140,"children":524},[525],"Kündige Änderungen an, ohne den Fokus zu stehlen."," Wenn sich Preis oder Optionsliste aktualisieren, erwartet ",{"tag":192,"href":51,"children":528},[529],"4.1.3 Statusmeldungen",", dass die Änderung programmatisch ermittelbar ist, etwa mit role=\"status\" für Updates und role=\"alert\" für Fehler, damit Screenreader sie ansagen, ohne den Fokus zu bewegen.",[532,517,535,538],{"tag":140,"children":533},[534],"Ausreichend große Ziele.",{"tag":192,"href":54,"children":536},[537],"2.5.8"," setzt für Zeigerziele ein Minimum von 24 mal 24 CSS-Pixeln, mit Ausnahmen; Farbfelder und kleine Stepper sind die Stellen, an denen Konfiguratoren scheitern.",[540,543,544,547],{"tag":140,"children":541},[542],"Nutze bewährte Muster."," Bevorzuge native Radiobuttons, Selects und Zahlenfelder; wo du eine durchsuchbare Optionsliste brauchst, folge dem ",{"tag":192,"href":57,"children":545},[546],"ARIA-Combobox-Muster"," samt Tastaturbedienung.",[549,552],{"tag":140,"children":550},[551],"Gesperrte Optionen brauchen Gründe."," Eine nur ausgegraute Option ist für Screenreader-Nutzer eine Sackgasse; gib den Grund als Text aus.",{"type":133,"content":554},[555],"Automatische Prüfwerkzeuge finden nur einen Teil davon. Spiele den kompletten Ablauf mit Tastatur und mindestens einem Screenreader durch, bevor du ihn für fertig erklärst.",{"type":151,"level":152,"id":123,"text":124},{"type":133,"content":558},[559],"Bevor ein Konfigurator live geht, will ich zu jedem dieser Punkte ein Ja:",{"type":306,"ordered":561,"items":562},true,[563,565,567,569,571,573,575,577],[564],"Jede Regel ist Daten mit Verantwortlichem, Version und Unit-Test.",[566],"Regeln kommen aus einer Quelle (meist dem PIM), und das Veröffentlichen eines Regelwerks ist ein geprüfter Schritt.",[568],"Preise werden auf dem Server aus einer versionierten Preisliste berechnet; der Browser entscheidet nie über einen Preis.",[570],"Warenkorb und Angebot validieren und bepreisen neu; eine manipulierte Anfrage wird abgelehnt.",[572],"Jede gespeicherte Konfiguration hält Regelwerk-Version, Preislisten-Version und Eingaben fest und lässt sich neu berechnen.",[574],"Fälle, die sich nicht automatisch bepreisen lassen, enden in einem ausdrücklichen „Angebot anfragen\", nicht in einem Fehler.",[576],"Die 95.-Perzentil-Zeit „Klick bis gültige Optionen\" wird mit echten Auswahlen gemessen.",[578],"Der ganze Ablauf funktioniert mit Tastatur und Screenreader, und Fehler und Statusänderungen werden in Text angesagt.",{"type":133,"content":580},[581],"Wenn du zuerst nur drei Dinge tun kannst, nimm den ersten, dritten und vierten Punkt.",{"type":151,"level":152,"id":126,"text":127},{"type":133,"content":584},[585],"Das wiederkehrende Thema ist Trennung. Regeln als Daten, an einem Ort verantwortet; Preise bei dem System, das dafür geradesteht; ein dünnes Frontend, das fragt statt zu wissen; eine Commerce-Plattform, die validierte Ergebnisse erhält. Genau das macht den Konfigurator stabil genug zum Erweitern, ob der nächste Schritt eine neue Produktfamilie, ein Angebotsworkflow oder ein Assistent obendrauf ist.",{"type":133,"content":587},[588,589,592,593,597],"Der geführte Konfigurator, den ich in Nuxt.js auf der Spryker Glue API gebaut habe, steht in ",{"tag":145,"to":146,"children":590},[591],"meinen Referenzen",". Wenn du einen planst und die Entscheidung Regelwerk oder Solver oder die Aufteilung zwischen PIM und ERP durchsprechen willst, findest du auf meiner Seite ",{"tag":145,"to":594,"children":595},"\u002Fexpertise\u002Fb2b-ecommerce-developer",[596],"B2B-E-Commerce-Entwickler"," die Details.",{"type":151,"level":152,"id":129,"text":130},{"type":306,"ordered":561,"items":600},[601,604,607,610,613,616,619,622,625],[602],{"tag":192,"href":26,"children":603},[33],[605],{"tag":192,"href":36,"children":606},[35],[608],{"tag":192,"href":39,"children":609},[38],[611],{"tag":192,"href":42,"children":612},[41],[614],{"tag":192,"href":45,"children":615},[44],[617],{"tag":192,"href":48,"children":618},[47],[620],{"tag":192,"href":51,"children":621},[50],[623],{"tag":192,"href":54,"children":624},[53],[626],{"tag":192,"href":57,"children":627},[56],[629,714,781,869],{"slug":630,"published":5,"minutes":631,"category":7,"tags":632,"keywords":636,"about":647,"sources":656,"cover":708,"og":709,"expertise":60,"locales":710,"lang":63,"title":711,"description":712,"coverAlt":713},"european-accessibility-act-b2b-shop",13,[633,634,635,10],"European Accessibility Act","BFSG","WCAG 2.2",[637,638,639,640,641,642,643,644,645,646],"European Accessibility Act B2B shop","BFSG B2B Onlineshop","Barrierefreiheit Onlineshop","Spryker barrierefrei","barrierefrei Webshop","BaFG Österreich Webshop","EN 301 549 WCAG 2.2","BFSG Kleinstunternehmen Ausnahme","Pimcore TYPO3 Barrierefreiheit","EAA e-commerce checklist",[648,650,653],{"name":633,"url":649},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEuropean_Accessibility_Act",{"name":651,"url":652},"Web Content Accessibility Guidelines","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWeb_Content_Accessibility_Guidelines",{"name":654,"url":655},"E-commerce","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FE-commerce",[657,660,663,666,669,672,675,678,681,684,687,690,693,696,699,702,705],{"title":658,"url":659},"BFSG section 1: purpose and scope (gesetze-im-internet.de)","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__1.html",{"title":661,"url":662},"BFSG section 2: definitions, consumer, microenterprise, e-commerce services","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__2.html",{"title":664,"url":665},"BFSG section 3: accessibility and the microenterprise exemption","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__3.html",{"title":667,"url":668},"BFSG section 14: duties of the service provider","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__14.html",{"title":670,"url":671},"BFSG section 32: rights of consumers and associations in the administrative procedure","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__32.html",{"title":673,"url":674},"BFSG section 37: fines","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__37.html",{"title":676,"url":677},"BFSG section 38: transitional provisions","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__38.html",{"title":679,"url":680},"Bundesfachstelle Barrierefreiheit: FAQ on the BFSG (B2B, microenterprises, EN 301 549)","https:\u002F\u002Fwww.bundesfachstelle-barrierefreiheit.de\u002FDE\u002FFachwissen\u002FProdukte-und-Dienstleistungen\u002FBarrierefreiheitsstaerkungsgesetz\u002FFAQ\u002Ffaq_node.html",{"title":682,"url":683},"AccessibleEU: The European accessibility standard EN 301 549 has been updated (7 September 2026)","https:\u002F\u002Faccessible-eu-centre.ec.europa.eu\u002Fcontent-corner\u002Fnews\u002Feuropean-accessibility-standard-en-301-549-has-been-updated-2026-09-07_en",{"title":685,"url":686},"W3C: Web Content Accessibility Guidelines (WCAG) 2.2","https:\u002F\u002Fwww.w3.org\u002FTR\u002FWCAG22\u002F",{"title":688,"url":689},"Deque: Automated testing identifies 57 percent of digital accessibility issues","https:\u002F\u002Fwww.deque.com\u002Fblog\u002Fautomated-testing-study-identifies-57-percent-of-digital-accessibility-issues\u002F",{"title":691,"url":692},"sitebrunch: What is the market surveillance authority for accessibility (MLBF)?","https:\u002F\u002Fwww.sitebrunch.com\u002Fnews\u002Fmlbf-marktueberwachungsstelle-barrierefreiheit",{"title":694,"url":695},"Marcus Herrmann: June 2026, how the MLBF intends to check","https:\u002F\u002Fmarcus-herrmann.com\u002Fblog\u002Fmlbf-verraet-wie-sie-pruefen-will",{"title":697,"url":698},"axes4: BFSG in practice, what has happened since the deadline (2026)","https:\u002F\u002Fwww.axes4.com\u002Fde\u002Fblog\u002Fpost\u002F2026\u002Fbfsg-in-der-praxis-was-sich-seit-dem-stichtag-getan-hat",{"title":700,"url":701},"ODC Legal: BFSG for websites, what companies must check in 2026","https:\u002F\u002Fwww.odclegal.de\u002Fblog\u002Fbfsg-website-pflicht",{"title":703,"url":704},"WKO: Information on the Austrian Barrierefreiheitsgesetz","https:\u002F\u002Fwww.wko.at\u002Fce-kennzeichnung-normen\u002Finformationen-zum-barrierefreiheitsgesetz",{"title":706,"url":707},"Web Crossing: One year of the Barrierefreiheitsgesetz, where online shops must improve","https:\u002F\u002Fwww.web-crossing.com\u002Fnews\u002Fdetail\u002Fein-jahr-barrierefreiheitsgesetz-wo-onlineshops-und-websites-jetzt-nachbessern-muessen\u002F","\u002Fimages\u002Fblog\u002Feuropean-accessibility-act-b2b-shop\u002Fcover.webp","\u002Fimages\u002Fblog\u002Feuropean-accessibility-act-b2b-shop\u002Fog.jpg",[62,63,64],"European Accessibility Act im B2B-Shop: was Spryker-, Pimcore- und TYPO3-Teams beheben müssen","Gilt der European Accessibility Act für B2B-Shops? Anwendungsbereich von BFSG und BaFG, Kleinstunternehmen-Ausnahme, Durchsetzung 2026, WCAG 2.2 und Fahrplan.","Diagramm: Ein B2B-Shop verzweigt in die Verbraucher-Frage nach BFSG und BaFG, die WCAG-2.2-AA-Konformität, die Barrierefreiheitserklärung und die Marktüberwachung.",{"slug":715,"published":5,"minutes":6,"category":7,"tags":716,"keywords":721,"about":732,"sources":741,"cover":775,"og":776,"expertise":60,"locales":777,"lang":63,"title":778,"description":779,"coverAlt":780},"pimcore-erp-delta-sync",[717,718,719,720],"Pimcore","SAP integration","PIM ERP sync","Symfony Messenger",[722,723,724,725,726,727,728,729,730,731],"Pimcore ERP delta sync","Pimcore developer","Pimcore SAP integration","PIM ERP Schnittstelle","Pimcore SAP Schnittstelle","PIM ERP sync best practices","Pimcore Symfony Messenger","delta sync vs full sync","idempotent import Pimcore","Pimcore Infor integration",[733,735,738],{"name":717,"url":734},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPimcore",{"name":736,"url":737},"SAP ERP","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSAP_ERP",{"name":739,"url":740},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",[742,745,748,751,754,757,760,763,766,769,772],{"title":743,"url":744},"Pimcore docs: Symfony Messenger","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FGetting_Started\u002FInstallation\u002FAdvanced_Installation_Topics\u002FSymfony_Messenger\u002F",{"title":746,"url":747},"Pimcore docs: Platform Versions","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore_Platform\u002FPlatform_Versions\u002F",{"title":749,"url":750},"Pimcore docs: Pimcore Editions","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore_Platform\u002FPimcore_Editions\u002F",{"title":752,"url":753},"Pimcore docs: Data Importer","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FData_Importer\u002F",{"title":755,"url":756},"Pimcore on GitHub: Release 2026.3.0","https:\u002F\u002Fgithub.com\u002Fpimcore\u002Fpimcore\u002Freleases\u002Ftag\u002Fv2026.3.0",{"title":758,"url":759},"Symfony docs: Messenger, Sync & Queued Message Handling","https:\u002F\u002Fsymfony.com\u002Fdoc\u002Fcurrent\u002Fmessenger.html",{"title":761,"url":762},"SAP Library: Change Pointer (Master Data Distribution)","https:\u002F\u002Fhelp.sap.com\u002Fdoc\u002Fsaphelp_nw73ehp1\u002F7.31.19\u002Fen-us\u002F4a\u002Fbb1e253536478be10000000a421937\u002Fcontent.htm?no_cache=true",{"title":764,"url":765},"SAP Library: Change Pointer (IDoc Interface\u002FALE)","https:\u002F\u002Fhelp.sap.com\u002Fdoc\u002Fsaphelp_em700_ehp01\u002F7.0.1\u002Fen-US\u002F12\u002F83e03c19758e71e10000000a114084\u002Fcontent.htm?no_cache=true",{"title":767,"url":768},"Infor docs: Infor ION and M3 BODs","https:\u002F\u002Fdocs.infor.com\u002Fm3cs\u002F10.2.3\u002Fen-us\u002Fm3csbom\u002Ffabsog\u002Fgoi1495809108914.html",{"title":770,"url":771},"Infor Developer Portal: Integration with ION","https:\u002F\u002Fdeveloper.infor.com\u002Ftutorials\u002Fintegration-with-ion",{"title":773,"url":774},"Debezium: open source distributed platform for change data capture","https:\u002F\u002Fdebezium.io\u002F","\u002Fimages\u002Fblog\u002Fpimcore-erp-delta-sync\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fpimcore-erp-delta-sync\u002Fog.jpg",[62,63,64],"Pimcore ERP Delta-Sync: Produktdaten zwischen SAP oder Infor, PIM und Shop","Produktdaten zwischen SAP oder Infor, Pimcore und Shop synchronisieren: Delta vs. Full Sync, Änderungserkennung, idempotente Importe, Messenger, Ownership, Replays.","Diagramm: Produktdaten fließen von einem SAP- oder Infor-ERP über einen Delta-Extrakt und eine Message Queue in Pimcore, wo Qualitätsprüfungen laufen, und weiter in den Shop.",{"slug":782,"published":5,"minutes":631,"category":7,"tags":783,"keywords":786,"about":797,"sources":804,"cover":862,"og":863,"expertise":864,"locales":865,"lang":63,"title":866,"description":867,"coverAlt":868},"nuxt-core-web-vitals-performance",[784,11,785,654],"Core Web Vitals","Performance",[787,788,789,790,791,792,793,794,795,796],"Core Web Vitals Nuxt","Nuxt performance optimization","improve LCP Nuxt","INP Nuxt hydration","fix CLS Vue","Nuxt lazy hydration","Nuxt Image LCP","Nuxt Scripts third-party scripts","Nuxt prerender vs SSR vs ISR","Core Web Vitals e-commerce",[798,800,801],{"name":784,"url":799},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCore_Web_Vitals",{"name":11,"url":30},{"name":802,"url":803},"Vue.js","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVue.js",[805,808,811,814,817,820,823,826,829,832,835,838,841,844,847,850,853,856,859],{"title":806,"url":807},"web.dev: Web Vitals","https:\u002F\u002Fweb.dev\u002Farticles\u002Fvitals",{"title":809,"url":810},"web.dev: Largest Contentful Paint (LCP)","https:\u002F\u002Fweb.dev\u002Farticles\u002Flcp",{"title":812,"url":813},"web.dev: Optimize Largest Contentful Paint","https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-lcp",{"title":815,"url":816},"web.dev: Interaction to Next Paint (INP)","https:\u002F\u002Fweb.dev\u002Farticles\u002Finp",{"title":818,"url":819},"web.dev: Optimize Cumulative Layout Shift","https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-cls",{"title":821,"url":822},"web.dev: Optimize long tasks","https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-long-tasks",{"title":824,"url":825},"Chrome for Developers: Chrome UX Report (CrUX)","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux",{"title":827,"url":828},"Chrome for Developers: CrUX methodology","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux\u002Fmethodology",{"title":830,"url":831},"GitHub: GoogleChrome\u002Fweb-vitals","https:\u002F\u002Fgithub.com\u002FGoogleChrome\u002Fweb-vitals",{"title":833,"url":834},"Nuxt docs: Rendering modes","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Frendering",{"title":836,"url":837},"Nuxt docs: Components (Lazy prefix, delayed hydration, client components)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fdirectory-structure\u002Fapp\u002Fcomponents",{"title":839,"url":840},"Nuxt docs: Experimental features (lazyHydration, payloadExtraction)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features",{"title":842,"url":843},"Nuxt docs: Data fetching (pick, transform, lazy)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fdata-fetching",{"title":845,"url":846},"Nuxt blog: Nuxt 4.5","https:\u002F\u002Fnuxt.com\u002Fblog\u002Fv4-5",{"title":848,"url":849},"GitHub: Nuxt releases","https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Freleases",{"title":851,"url":852},"Nuxt Image: NuxtImg","https:\u002F\u002Fimage.nuxt.com\u002Fusage\u002Fnuxt-img",{"title":854,"url":855},"Nuxt Fonts module","https:\u002F\u002Fnuxt.com\u002Fmodules\u002Ffonts",{"title":857,"url":858},"Nuxt Scripts: Getting started","https:\u002F\u002Fscripts.nuxt.com\u002Fdocs\u002Fgetting-started",{"title":860,"url":861},"Nuxt Scripts: Script triggers","https:\u002F\u002Fscripts.nuxt.com\u002Fdocs\u002Fguides\u002Fscript-triggers","\u002Fimages\u002Fblog\u002Fnuxt-core-web-vitals-performance\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-core-web-vitals-performance\u002Fog.jpg","vue-nuxt-developer",[62,63,64],"Core Web Vitals für Nuxt-Sites und Shops: LCP, INP und CLS beheben","So behebst du LCP, INP und CLS in Nuxt-4-Sites und Shops: Bilder, Hydration, Fonts, Drittanbieter-Skripte, Prerender vs. SSR vs. ISR und Messung mit echten Nutzern.","Diagramm: ein Nuxt-Seitenaufruf vom Server-HTML über Hero-Bild, Hydration und Interaktion, mit den Schwellenwerten für LCP, INP und CLS an den Stufen.",{"slug":870,"published":871,"minutes":872,"category":7,"tags":873,"keywords":879,"about":888,"sources":897,"cover":910,"og":911,"expertise":864,"locales":912,"lang":63,"title":913,"description":914,"coverAlt":915},"home-assistant-ev-charging-energy-manager","2026-09-29",9,[874,875,876,877,878],"Home Assistant","EPEX Spot","Energy prices","Tesla","Energy management",[880,881,882,883,884,885,886,887],"EPEX Austria prices","spot tariff Austria EV charging","Home Assistant EV charging","cheapest hours charging","day-ahead price Austria","negative electricity prices Austria","Tesla charging spot prices","load management 3 phase",[889,892,894],{"name":890,"url":891},"EPEX SPOT","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEPEX_SPOT",{"name":874,"url":893},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHome_Assistant",{"name":895,"url":896},"Load management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLoad_management",[898,901,904,907],{"title":899,"url":900},"aWATTar Austria: market data API","https:\u002F\u002Fwww.awattar.at\u002Fservices\u002Fapi",{"title":902,"url":903},"EPEX SPOT: market results","https:\u002F\u002Fwww.epexspot.com\u002Fen\u002Fmarket-results",{"title":905,"url":906},"Home Assistant developer docs: apps","https:\u002F\u002Fdevelopers.home-assistant.io\u002Fdocs\u002Fapps\u002F",{"title":908,"url":909},"Home Assistant: Tesla Fleet integration","https:\u002F\u002Fwww.home-assistant.io\u002Fintegrations\u002Ftesla_fleet\u002F","\u002Fimages\u002Fblog\u002Fhome-assistant-ev-charging-energy-manager\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fhome-assistant-ev-charging-energy-manager\u002Fog.jpg",[62,63,64],"Laden nach EPEX-Preisen in Österreich: was meine Home-Assistant-App spart","Ein Jahr stündlicher EPEX-Preise für Österreich, nachgespielt für einen Tesla und einen Boiler: Laden in den günstigsten Stunden kostet 6,5 statt 18,9 ct\u002FkWh, knapp 590 € im Jahr, ohne 20-A-Sicherung zu sprengen.","Titelbild: drei Balken vergleichen 18,9, 13,1 und 6,5 ct\u002FkWh für Laden um 18:00, über Nacht und in den günstigsten Stunden.",1791009037481]