Web Component: ohne Build-Schritt
Für Seiten ohne eigenen Bundler — WordPress, Typo3, statisches HTML — gibt es das Micro-Frontend zusätzlich als vorgebautes, selbst gehostetes Bundle: Ein Script-Tag registriert das Element <aditus-shop>, React inklusive, kein npm, kein Build. Ausgeliefert wird es von deiner ADITUS-Instanz unter einer versionierten URL (/api/embed/v1/…), nicht über ein öffentliches CDN — für dieses Demo-System ist das https://aditus.dev/api/embed/v1/aditus-shop.js. Die URL ist bewusst öffentlich und braucht keine Zugangsdaten: Das Bundle ist reiner publizierter Code, das eigentliche Gate sind dein Publishable Key mit seiner Domain-Whitelist plus die Session. Dieser Weg ist strikt optional und rein additiv: Hosts mit eigenem Build integrieren weiter das Quellpaket über mount(), genau wie auf dieser Seite dokumentiert — gleiche Journey, gleiche CSS-Hooks, gleiches Theming.
<!-- 1. Das selbst gehostete Bundle einbinden (einmal pro Seite). -->
<script src="https://ihre-aditus-instanz.de/api/embed/v1/aditus-shop.js" defer></script>
<!-- 2. Das Element platzieren — der Shop rendert nativ an dieser Stelle. -->
<aditus-shop
public-key="pk_live_ihrkey"
event-slug="ExperienceDaysv52024"
culture="de-DE"
></aditus-shop>
<!-- 3. Optional: Journey-Events als ganz normale DOM-Events konsumieren. -->
<script>
document.querySelector("aditus-shop").addEventListener("cart:update", (e) => {
console.log("Positionen im Warenkorb:", e.detail.itemCount);
});
</script>
AttributBedeutung
public-keyDein Publishable Key (Domain-Whitelist greift). Ist nur dieses Attribut gesetzt, mintet das Element seine Browser-Session selbst — der richtige Modus für Seiten ohne Backend.
session-tokenEine von DEINEM Backend gemintete Session (server-zu-server, siehe unten). Ist er gesetzt, mintet das Element nie selbst — deine Seite besitzt den Session-Lebenszyklus.
api-baseBasis-URL der ADITUS-API. Default ist die Origin, von der das Bundle-Script geladen wurde — normalerweise setzt du das nie.
event-id / event-slugPinnt die Journey auf ein Event (überspringt die Event-Auswahl). Bevorzugt den sprechenden Slug.
cultureShop-Sprache/-Locale, z. B. de-DE oder en-GB. Eine Attribut-Änderung re-lokalisiert an Ort und Stelle — die Journey des Benutzers bleibt erhalten.
start-phase / article-layout / event-layout / article-select-mode / show-headerDie flachen Darstellungsoptionen, gleiche Werte wie in der mount()-Config (articles, cards, quantity, …).
base-stylesAuf "false" gesetzt entfällt der neutrale Default-Skin und du stylst jeden Hook selbst.
Session & Selbstheilung
Die Session-Regeln dieser Seite gelten unverändert. Mit Backend mintest du server-zu-server und setzt session-token — das Element mintet dann nie selbst. Ohne Backend setzt du nur public-key: Das Element mintet eine Browser-Session über den Domain-gegateten Endpunkt und mintet bei Ablauf transparent nach, der Benutzer landet nie in einer Sackgasse. Light DOM wie immer: kein iFrame, kein Shadow DOM — dein CSS erreicht jeden dokumentierten Hook.
Events & Versionierung
Der Event-Bus erscheint als ganz normale DOM-CustomEvents auf dem Element (bubbelnd, Payload in event.detail) — cart:update, checkout:complete und der analytics-Spiegel, gleiche Namen und Payloads wie bei handle.on(). Die URL trägt die Major-Version: v1 erhält kompatible Updates an Ort und Stelle; ein Breaking Change erscheint als /embed/v2/, damit sich unter deiner Seite nichts unangekündigt ändert. Alles jenseits der flachen Attribute — Theme-Objekte, Callbacks wie onUserRequired, Card-Content — bleibt bewusst dem Quellpaket vorbehalten.
Attribute, keine Properties
Das Element wird ausschließlich über HTML-Attribute konfiguriert — und Attribute sind immer Strings. base-styles="false" ist der wörtliche String "false"; das Element parst ihn, JavaScript-Properties setzt du nie. Frameworks binden Namen mit Bindestrich wie public-key ohnehin als Attribut, es braucht also keine besondere Binding-Syntax. Alles, was sich nicht als flacher String ausdrücken lässt — Theme-Objekte, Callbacks, Card-Content — ist bewusst kein Attribut: Dafür ist das Quellpaket da.
Updates ohne Remount
Eine Attribut-Änderung am lebenden Element aktualisiert die laufende Instanz an Ort und Stelle — genau wie handle.update() im Quellpaket. Darstellungs-Attribute (culture, Layouts) erhalten die Journey des Benutzers; nur eine Änderung der Session-Identität (public-key, session-token, api-base) etabliert die Session neu. Wird das Element aus dem DOM entfernt, unmountet der Shop sauber — inklusive aller Listener.