WHITEPAPER · FÜR ENTWICKLER

So ist CartSome
verdrahtet.

CartSome ist ein kompletter Shop – Storefront, Checkout, Versand und Adminbereich –, den du aus dem KI-Client steuerst, den du ohnehin nutzt. Gebaut von Leuten, die Banken bauen, und schnell, weil wir es messen. Darunter: eine Zelle, die die Shops bedient, eine Steuerungsebene, die die Plattform betreibt, eine harte Grenze dazwischen, ein Schema pro Shop und Zellen mit jeweils ein paar hundert Shops. Hier steht, wie alles zusammenpasst, was die KI anfassen darf und wie ein Shop einzieht. Bei diesem Text kamen keine Buzzwords zu Schaden.

Die Kurzfassung
  • Gebaut von Leuten, die Banken bauen
  • Shops und Plattform auf getrennten Cores
  • Ein Schema und zwei Logins pro Shop
  • Zellen mit rund 300 Shops
  • 314 Shopfunktionen über MCP, mit Rückgängig-Option
01 DIE DNA

Gebaut von Leuten,
die Banken bauen.

Tempo liegt uns in der DNA. Dein Geld nicht zu verlieren auch. CartSome wird von Leuten gebaut, die Banken bauen, und das merkt man an den unspektakulären Stellen: ein einziger Schreiber für Geld und Bestand, eine Spur für jeden Eingriff, eine Vorschau vor jedem großen Schreibvorgang und eine Zahl hinter jeder Behauptung.

  • Erst korrekt, dann schnellGeld und Bestand haben genau einen Schreiber: shop-core. Zahlungen werden auf dem Server geprüft, nie dem Browser geglaubt, und der Browser rechnet in ganzen Cent.
  • Alles hinterlässt eine SpurJede Vergabe und jeder Entzug eines Zugriffs wird in derselben Transaktion festgehalten wie der Vorgang selbst, und jeder Eingriff eines Operators im Audit-Trail der Plattform.
  • Langweilig mit AbsichtPostgreSQL, Java, rohes SQL und Terraform: Werkzeuge, die es auch in zehn Jahren noch gibt, und keine clevere Schicht, die man um 3 Uhr nachts debuggen muss.
  • Gemessen, nicht geratenJede Änderung daran, wie die Storefront liest, wird vor dem Release gegen einen Katalog mit 500.000 Produkten gebenchmarkt. Ein Bauchgefühl ist der Anfang eines Benchmarks, nie sein Ende.

Schnell – und Gates halten es so

Listenseite250 ms

Budget für eine ungecachte Listenseite bei p95, auf einem Katalog mit 500.000 Produkten. Ein Filter, ein Scrollen oder eine Suche bekommt 150.

Lighthouse, mobil0

Layout-Verschiebung auf Startseite und Produktseiten von autotools.ee, bei unter 30 ms Blockierzeit. Gemessen am 29. Oktober 2026.

Seitengewicht1 KiB

mehr als main reicht, damit eine Seite durchs Speed-Gate fällt.

  • Auf dem Server gerendert, an der Edge gecachtSeiten kommen als HTML in der Sprache des Kunden an, und shop-core hält Listen- und Produktseiten in Valkey warm.
  • Ein Byte-Budget in der CIEinstieg, Shell und jeder Route-Chunk der Storefront werden bei jeder Änderung an einem Budget gemessen, und das Budget kennt nur eine Richtung: nach unten. Jede Sprache kommt in einem eigenen Chunk, ein Kunde lädt also nur eine herunter.
  • Ein Speed-Gate vor dem ReleaseEs baut main und die Änderung nebeneinander und lässt jede Seite durchfallen, die schwerer wird oder in Lighthouse beim Laden, bei der Layout-Verschiebung oder bei der Blockierzeit langsamer.
  • Ein Worst-Case-GateJede Theme-Option am schwersten Anschlag, jeder Sektionstyp auf einmal, und der Shop darf trotzdem nicht langsam werden. Themes sind CSS-Variablen, ein Theme bringt also überhaupt kein JavaScript mit.
  • Leichte BilderJedes Produktbild wird in AVIF-Varianten skaliert, und statische Dateien gehen vorkomprimiert mit brotli raus.
Schnell auch für Shopbetreiber. Tempo heißt nicht nur Ladezeit. Ein Satz an deinen KI-Client ersetzt einen Nachmittag voller Tabs: „Gib dieses Wochenende 15 % Rabatt auf Winterpflege“ ist eine Vorschau und ein Ja, keine zwölf Formulare.
02 DER AUFBAU

Zwei Hälften.
Eine harte Grenze.

Die meisten Plattformen legen sich pro Feature einen Dienst zu. Wir trennen an genau einer Stelle: die Shops auf der einen Seite, die Plattform auf der anderen. Jede Hälfte hat ihre eigene App, ihren eigenen Core, ihren eigenen Datenbank-Login und ihre eigene Hälfte des Schlüssels. Und die alte Regel gilt auf beiden Seiten: Nur ein Core schreibt.

  • shop-core – die Zelle, in Java 25 und Spring BootDer einzige Schreiber für die Daten der Shops in PostgreSQL, Valkey und S3. Jede Admin-Änderung, jeder Import, jede Zahlung und jeder Shop-Job läuft über ihn. Er hängt nicht am öffentlichen Internet, prüft jeden Zahlungs-Webhook und jede Signatur selbst und öffnet die versiegelten Secrets der Shops.
  • platform-core – die SteuerungsebeneDieselbe Codebasis, gebaut als zweite Anwendung mit eigenem Image: das Backend der Konsole, Abrechnung, Organisationen und Onboarding, die eigene Mail der Plattform und die Jobs der Steuerungsebene. Sein Datenbank-Login erreicht das Schema keines Shops, und er führt keine Migrationen aus.
  • Die Zell-API dazwischenDie beiden Cores sprechen über zwei interne Türen miteinander, eine pro Richtung, jede mit einem eigenen Secret. Jede Tür speichert nur einen SHA-256 des Secrets, das sie annimmt, also hält kein Core etwas, das seine eigene Tür öffnet. Keine Anfrage eines Kunden wartet auf die Steuerungsebene.
  • shop web – TanStack Start, React, serverseitig gerendertRendert jede Storefront in der Sprache des Kunden, den Adminbereich des Shops, das Admin-MCP und die Tür der Trade API. Er liest Valkey, dazu PostgreSQL über den eigenen Lese-Login des Shops, und schreibt nichts außer Anmelde-Sessions; jeder andere Schreibvorgang geht an shop-core.
  • Die Konsole – eine eigene AppEine separate App mit eigenem Image für admin.cartsome.com, das Operator-MCP, die Formulare von cartsome.com und den Webhook von Stripe. Sie hat keinen Datenbanktreiber, hält keine Secrets irgendeines Shops und spricht nur mit platform-core.
  • Die Edge – CloudFront und WAFSeiten werden an der Edge gecacht, Bilder kommen direkt aus S3. Der Load Balancer dahinter antwortet nur CloudFront und schickt jede Adresse an die App, die sie bedient, und eine Flut, die auf einen Shop zielt, wird schon an der Edge gestoppt, pro Shop-Adresse.
  • Aurora PostgreSQL 18, rohes SQLKein ORM, nirgends. Auch die Volltextsuche läuft in PostgreSQL, in der Sprache des Kunden und nachsichtig bei Tippfehlern. Kein separater Suchcluster, den man babysitten muss.
  • Valkey und S3Valkey hält die Seiten, die shop-core vorwärmt, bevor Kunden kommen. S3 hält Produktbilder (AVIF-Varianten), Theme-Schriften, einen Produktfeed pro Sprache und den Export eines Shops, der geht.
  • Container auf ARMDie vier Dienste laufen auf ECS Fargate, auf Graviton, jeder aus seinem eigenen Image, und die Bild-Worker laufen auf Lambda, ebenfalls auf ARM. Terraform beschreibt alles, und nichts wird in einer Konsole zusammengeklickt.

Bilder, in der Warteschlange

Ein Shop, der einzieht, bringt Tausende Bilder mit, und ein neuer Shop soll niemandes Checkout bremsen, während sie berechnet werden. Darum berechnet shop-core sie nicht.

  • Der Core reiht nur einShop-core legt jede Bildaufgabe auf SQS und hält die Antworten fest, sobald sie zurückkommen, in Stapeln, eine Transaktion pro Shop. Die Worker haben überhaupt keinen Datenbank-Login.
  • Eine faire Warteschlange pro ShopJeder Shop ist eine eigene Gruppe in den SQS Fair Queues, mit einer interaktiven Spur für ein Bild, das ein Admin hochlädt, einer Massenspur für Importe und in jeder Spur einer Obergrenze pro Shop. Der große Import eines Shops drängelt sich nie vor das eine Foto eines anderen.
  • Gleicher Encoder, mehr HändeDie Lambda-Worker kodieren mit demselben libvips wie der Core, ein Bild sieht also gleich aus, egal wer es berechnet hat. Downloads werden pro Quell-Host gedrosselt, damit der Server eines Lieferanten nicht überflutet wird.
  • Einmal berechnet, überall genutztEin Bild wird am Hash seiner Bytes erkannt. Hat irgendein Shop in der Zelle dieselbe Quelle schon berechnet, verwenden die Worker dessen Dateien wieder, statt neu zu kodieren.
  • Gebaut für den AnsturmDie Flotte skaliert hoch, wenn viele Shops auf einmal einziehen, und kostet im Leerlauf nichts, und der Adminbereich zeigt jeden Lauf live: erledigt, wiederverwendet, fehlgeschlagen, wartend und seinen Platz in der Warteschlange.
Importe sind Gäste, keine Hausherren. Jede Tabelle ist als Kern, Kanal, abgeleitet oder Audit eingestuft. Ein Lieferantenfeed oder ein Import ist ein Kanal: Er schreibt über dieselben Operationen wie ein Admin, und wer ihn entfernt, behält einen vollständigen, gültigen Katalog. Daten behalten ihre Bedeutung, egal wer sie eingetippt hat.
03 DIE KARTE

Das Ganze
auf einer Seite.

Wer mit wem spricht, vom Handy eines Kunden bis hinunter zu den Platten. Durchgezogene Linien tragen Anfragen und Schreibvorgänge; gestrichelte lesen nur.

Infrastruktur von CartSome Operatoren, Kunden, die Systeme anderer Firmen, KI-Clients und Shop-Admins erreichen die Edge aus CloudFront und WAF. In Zelle 1 in Stockholm schickt ein Load Balancer die Adressen der Konsole an die Konsole und die Adresse jedes Shops an shop web. Die Konsole spricht mit platform-core, der Steuerungsebene. Shop web liest PostgreSQL und Valkey und reicht jeden Schreibvorgang an shop-core weiter, die Zelle. Die beiden Cores sprechen über die Zell-API, mit einem Secret je Richtung. Shop-core schreibt in Aurora PostgreSQL, Valkey und S3 und reiht Bildarbeit für die Worker ein, die nach S3 schreiben; platform-core schreibt das Plattformschema über seinen eigenen Login. Zelle 2 öffnet bei Bedarf, in einer beliebigen AWS-Region. Die Liste unter dem Diagramm sagt dasselbe in Worten. OperatorenDAS CARTSOME-TEAMKONSOLE · MCP KundenMENSCHEN UNDKI-EINKAUFSAGENTEN B2B-KäuferFIRMENSYSTEME,MIT API-SCHLÜSSEL Dein KI-ClientCLAUDE · CHATGPTCURSOR · GEMINI Shop-AdminsDER ADMINBEREICH,IM BROWSER Die Edge – CloudFront + WAFSEITENCACHE · TLS FÜR *.CARTSOME.COM UND EIGENE DOMAINS · LIMITS JE SHOP-ADRESSE ZELLE 1 · STOCKHOLM (EU-NORTH-1) · IN BETRIEB Load BalancerANTWORTET NUR CLOUDFRONT · ROUTET NACH ADRESSE KonsoleADMIN.CARTSOME.COMOPERATOR-MCP · WEBSITE-APIKEINE SHOP-SECRETS shop webTANSTACK START · SSR · JEDE STOREFRONTADMINBEREICH · ADMIN-MCP · SHOPPING-MCPDIE TÜR DER TRADE API platform-coreDIE STEUERUNGSEBENEKONSOLE · ABRECHNUNG · ONBOARDINGPLATTFORM-MAIL · EIGENER LOGIN shop-core – die Zelle, der einzige SchreiberJAVA 25 · SPRING BOOT · PRÜFT JEDEN WEBHOOKÖFFNET DEN KMS-VERSIEGELTEN TRESOR DER SHOPSEIN LOGIN JE SHOP · REIHT BILDAUFGABEN EIN ZELL-APIEIN SECRETJE RICHTUNG Bild-WorkerSQS FAIR QUEUES · GRUPPE JE SHOPLAMBDA · LIBVIPS · OHNE DUBLETTEN Aurora PostgreSQLDAS PLATTFORMSCHEMA, MIT EIGENEM LOGINEIN SCHEMA UND ZWEI LOGINS JE SHOP ValkeyWARME SEITEN,JE SHOP S3BILDER · SCHRIFTEN · FEEDSSHOP-EXPORTE ZELLE 2 · BEI BEDARF · BELIEBIGE AWS-REGIONGleiche Module, frischer Stack: öffnet, wenn Zelle 1 fast voll ist, oder für einen großen Shop. ANFRAGEN UND SCHREIBENNUR LESENDNOCH NICHT GEBAUT
Breites Diagramm · am Handy seitwärts scrollen

Die Karte in Worten

  1. Wer anklopft. Kunden (Menschen und KI-Shopping-Agenten), die Systeme anderer Firmen über die Trade API, der KI-Client eines Shopbetreibers, die Admins der Shops und die Operatoren von CartSome kommen alle über die Edge herein.
  2. Die Edge. CloudFront cacht Seiten, liefert Bilder direkt aus S3, hält die Zertifikate für jede *.cartsome.com-Adresse und für die eigene Domain jedes Shops, und ihre WAF begrenzt jede Shop-Adresse für sich.
  3. Der Load Balancer antwortet nur CloudFront. Er schickt die Adresse jedes Shops an shop web, admin.cartsome.com und die API von cartsome.com an die Konsole.
  4. Shop web rendert die Storefront, den Adminbereich und das Admin-MCP, dazu ein öffentliches MCP für Shopping-Agenten, das jeder Shop selbst einschaltet, und die Tür der Trade API. Er liest PostgreSQL und Valkey und reicht jeden Schreibvorgang an shop-core weiter.
  5. Die Konsole bedient admin.cartsome.com, das Operator-MCP, die Formulare von cartsome.com und den Webhook von Stripe und spricht nur mit platform-core.
  6. Shop-core ist die Zelle: der einzige Schreiber für die Daten der Shops in PostgreSQL, Valkey und S3. Er prüft Webhooks, öffnet den Tresor der Shops und legt Bildarbeit in die Warteschlangen.
  7. Platform-core ist die Steuerungsebene: Organisationen, Onboarding, Abrechnung, die Mail der Plattform und ihre Jobs, über einen eigenen Datenbank-Login. Er erreicht die Zelle nur über die Zell-API, mit einem Secret je Richtung.
  8. Die Bild-Worker holen Aufgaben aus den SQS Fair Queues, eine Gruppe pro Shop, kodieren sie auf Lambda und schreiben die Dateien nach S3.
  9. Die Daten: Aurora PostgreSQL mit dem Plattformschema und einem Schema pro Shop, Valkey mit den warmen Seiten jedes Shops und S3 für Bilder, Schriften, Feeds und Exporte.
  10. Zelle 1 betreibt all das heute in Stockholm. Zelle 2 ist derselbe Stack noch einmal, geöffnet, wenn er gebraucht wird, in der AWS-Region, die ihre Shops brauchen.

Das Leben einer Anfrage

1

Die Adresse wählt den Shop

Die Edge reicht die echte Adresse des Shops durch. Shop web ordnet sie genau einem Shop zu und bindet ihn für die gesamte Anfrage.

2

Lesen bleibt in der Nähe

Eine warme Seite kommt aus Valkey; alles andere wird über den eigenen Nur-Lese-Login des Shops gelesen.

3

Schreiben geht an shop-core

Web leitet den Schreibvorgang samt Namen des Shops weiter. Shop-core prüft das gemeinsame Secret und schreibt dann über den eigenen Login des Shops.

4

Caches ziehen nach

Shop-core wirft die betroffenen Seiten dieses Shops aus dem Cache, damit der nächste Kunde den neuen Preis sieht.

04 EIN SCHEMA PRO SHOP

Dein Shop.
Dein Schema.

Viele Shops, ein Datenbankcluster, null geteilte Tabellen. Jeder Shop bekommt sein eigenes PostgreSQL-Schema, und die Datenbank selbst hält die Nachbarn draußen.

  • Ein Schema und zwei LoginsShop n lebt in seinem eigenen Schema, gebaut aus einer gemeinsamen Vorlage. Shop web meldet sich mit dem Lese-Login des Shops an, shop-core mit seinem Schreib-Login, und keiner von beiden erreicht einen anderen Shop. Der Login von platform-core erreicht überhaupt keinen Shop.
  • Keine Mandantenspalte zum VergessenTabellen behalten im Schema ihre Form: keine Mandanten-ID in jeder Zeile, kein Filter, den eine Abfrage vergessen könnte. Fremdschlüssel verlassen das Schema nie.
  • Abfragen nennen nie ein SchemaDer Login, mit dem sich eine Verbindung anmeldet, wählt den Shop, und eine Verbindung bedient ihr Leben lang nur diesen einen. Ein statischer Check lässt den Build scheitern, sobald eine Abfrage einen Schemanamen enthält.
  • Pools, die bei Bedarf öffnenJeder Shop bekommt eigene kleine Verbindungspools, geöffnet bei seiner ersten Anfrage und geschlossen, sobald er still wird. So begrenzt das Verbindungsbudget der Datenbank, wie viele Shops gleichzeitig beschäftigt sind, nicht wie viele es gibt. Jeder Shop hat auch sein eigenes Anfragebudget, und ein Shop, der es überschreitet, soll es später noch einmal versuchen – nur er.
  • Caches und Links kennen ihren ShopJeder Cache-Eintrag ist nach Shop geschlüsselt. Sessions, Bestelllinks, Geschenkkarten-Links und Abmelde-Tokens werden mit den eigenen Schlüsseln des Shops signiert, der Link des einen Shops wird beim anderen also abgelehnt.
  • Eine Leak-Suite, die an allen Türen rütteltSie legt für zwei Shops in jeder mandantenbezogenen Tabelle eine Zeile an und liest jede als der jeweils andere, über die Verbindungen von shop-core und von shop web, und ruft dann jeden Core-Endpunkt auf, der eine ID annimmt. Sie läuft bei jeder Änderung.
Warum keine Row-Level Security? Wir haben es auf einem Katalog mit 500.000 Produkten gemessen. Eine Policy auf einer Session-Einstellung hat die Volltextsuche, die Trigramm-Suche und die Suche nach normalisierten Artikelcodes von ihren Indizes geworfen: im Schnitt 4,5- bis 7,6-mal langsamer. Ein Schema pro Shop braucht überhaupt kein Prädikat, also bleibt die Suche schnell.
05 ZELLEN

Zellen statt
eines großen Klumpens.

Wir skalieren über Zellen. Eine Zelle ist ein kompletter Stack: ihr eigener Aurora-Cluster, ihr eigenes shop-core und shop web, die Schemas ihrer Shops, ihre eigenen Bild-Warteschlangen und Worker. Ist eine voll, öffnen wir die nächste. Die Steuerungsebene steht abseits und spricht mit einer Zelle nur über die Zell-API. Die Plattform wächst; keine einzelne Zelle muss es.

Dichte~300

Shops in einer geteilten Zelle. Gemessen, nicht geraten: Einer Testzelle mit 1.000 Shops ging zweimal der Speicher aus.

Heute1

Zelle: Zelle 1, in AWS Stockholm. Autotools lebt dort, und vorerst auch jeder neue Shop.

Als Nächstesn

weitere Zellen, gebaut aus denselben Terraform-Modulen, geöffnet nach Bedarf in der AWS-Region, die ihre Shops brauchen.

Was „voll“ bedeutet

Eine Zelle nimmt keinen neuen Shop mehr an, sobald eines dieser Signale seine Obergrenze erreicht. Bei 80 Prozent einer beliebigen Obergrenze planen wir die nächste Zelle; die Zellenseite der Konsole zeigt den aktuellen Füllstand und nennt das Signal.

Signale, dass eine Zelle voll ist
SignalVoll, wenn
Shopsrund 300 in der Zelle
Datenbank­kapazitätAurora minutenlang nahe an seiner Obergrenze läuft
Verbindungendas Verbindungs­budget überschreiten würde, was der Cluster erlaubt
Verbindungs­poolsShops Verbindungen verweigert werden, obwohl die Datenbank noch Luft hat
Cache-SpeicherValkey sich seiner Speichergrenze nähert
Migrationeneine Migrationswelle über die Schemas der Zelle fehlschlägt oder stehen bleibt
  • Ein großer Shop bekommt eine eigene ZelleEin Shop, der einer geteilten Zelle entwächst, bekommt eine Zelle für sich allein. Autotools bleibt in Zelle 1.
  • Von Grund auf portabelAlles, was einem Shop gehört, trägt seinen Namen: sein Schema mit eigenen Schlüsseln und Sequenzen, seine Tresorzeilen, versiegelt unter seiner Organisation, seine Cache-Schlüssel, seine Feed-Dateien. Nichts bindet ihn an die Zelle, in der er geboren wurde.
  • Ehrlich gesagtEinen Shop von einer Zelle in eine andere umzuziehen, ist noch kein Knopfdruck. Das kommt mit der zweiten Zelle, und im Weg steht nichts Geteiltes.
06 SICHERHEIT

Standardmäßig dicht.
Langweilig mit Absicht.

Das Spannende an einem Shop sollten die Produkte sein. Hier kommt der langweilige Teil, so genau, wie wir ihn gern veröffentlichen.

  • Isolation in der DatenbankSchemas und Logins pro Shop, durchgesetzt von PostgreSQL-Grants statt von Code, der hoffentlich an einen Filter denkt. Die Steuerungsebene hat einen eigenen Login, und der Login von shop-core hat keinerlei Recht auf die Tabellen der Steuerungsebene.
  • Ein versiegelter Tresor pro OrganisationZahlungs-, Versand- und Mail-Schlüssel liegen im Tresor, jeder mit AES-256-GCM versiegelt, unter einem frischen Datenschlüssel aus einem KMS-Schlüssel, den nur die beiden Cores benutzen dürfen, und an seine Organisation und seinen Namen gebunden. Eine kopierte Zeile lässt sich nirgends öffnen. Secrets leben nie im Code.
  • Jeder Core hält eine Hälfte des SchlüsselsShop-core öffnet die Secrets der Shops und platform-core die der Plattform selbst, etwa ihre Schlüssel für Stripe und die Buchhaltung. Die Policy des Schlüssels verweigert jedem der beiden die Hälfte des anderen.
  • Zwei Türen, zwei SecretsDie Cores rufen einander mit einem Secret pro Richtung auf, und jede Tür speichert nur den SHA-256 des Secrets, das sie annimmt, also hält kein Core, was seine eigene Tür öffnet.
  • Passkeys für die Leute, die alles betreibenOperatoren melden sich mit Passkeys an und bestätigen jede Änderung an der Plattform mit einem frischen. Zugriff zu vergeben ist nie ein Tool: Kein Token und keine KI kann einen Operator hinzufügen.
  • KI-Schreibzugriffe, die du siehst und zurücknehmen kannstMassenänderungen und nach außen wirkende Schreibvorgänge laufen zuerst als Vorschau und werden erst nach einer Bestätigung angewendet, die an das Gesehene gebunden ist; hat sich der Shop dazwischen geändert, wird sie abgelehnt. Danach liefert jeder Schreibvorgang gleich mit, wie er sich rückgängig machen lässt.
  • Tokens mit dem kleinsten SchlüsselbundJedes Admin-MCP-Token und jede Verbindung trägt Berechtigungen und sieht nur die Tools, die diese erlauben. Erstattungen, Secrets und Admins brauchen jeweils eine eigene Berechtigung.
  • Kundendaten bleiben aus dem Chat rausDie Antwort eines Tools geht an den KI-Anbieter, darum lassen Antworten Namen, E-Mail-Adressen, Telefonnummern, Anschriften und Steuernummern von Kunden weg. Die wenigen ausdrücklichen Ausnahmen, etwa der Wortlaut eines Bestellkommentars, sind in den Regeln benannt.
  • Eine Spur für jeden Operator-EingriffJede Änderung eines Operators und jeder Lesezugriff über Shops hinweg landet im Audit-Trail der Plattform.
07 DAS HIRN

314 Shop­funktionen.
Null Formulare.

Das Admin-MCP gibt einem KI-Client 314 Shopfunktionen, und jede davon gibt es auch im Adminbereich im Web. Verbinde Claude, ChatGPT, Cursor, Gemini oder jeden anderen MCP-Client per Anmeldung oder mit einem eingefügten Token. Der Schalter steht auf Aus, bis ein Admin ihn umlegt.

01 / KATALOG

Katalog und Preise.

Produkte, Produktfamilien, Tags, Menüs, Attribute, Importe, Preisregeln, Rabattaktionen, Sets und Rabattcodes. tag_products, manage_family, explain_price.

02 / BESTELLUNGEN

Bestellungen und Bestand.

Eine Bestellung finden, voranbringen, kommentieren, Versandetiketten anfordern; Lager, Inventuren, Lieferantenbestellungen und Händlerkonten. Erstattungen brauchen eine eigene Berechtigung.

03 / STOREFRONT

Inhalte und Storefront.

Startseiten-Layouts, Seiten, Blog, FAQ, Theme, Ankündigungen, Suchbegriffe und alles, was Suchmaschinen und KI-Assistenten lesen.

04 / MARKETING

Marketing und E-Mail.

Anmeldeformular, Kampagnen, Willkommensserien, Automationen und Nachrichtenvorlagen. Eine Kampagne wird erst nach ihrer Vorschau eingeplant.

05 / EINSTELLUNGEN

Einstellungen und Einrichtung.

Sprachen, Märkte, Versand, Checkout, Anmeldung, Apps und die Checkliste vor der Eröffnung. manage_languages, set_shop_open.

06 / BILDER

Bildstudio.

Zeichnet Bilder für Produkte, Kategorien, Slider und E-Mail-Banner, mit deinen eigenen Fotos als Vorlage, und zeigt dem Client, was es gezeichnet hat, bevor es irgendwo landet.

Das Sicherheitsmodell

1

Lesen

Der Client liest den Shop, wie er ist. Zu jedem Schreibvorgang gibt es einen Lesevorgang, der die IDs zeigt, die er braucht.

2

Vorschau

Eine Massenänderung oder ein nach außen wirkender Schreibvorgang sagt zuerst, was er ändern würde, mit Anzahl und Stichprobe, und ändert nichts.

3

Bestätigen

Du sagst Ja. Beim Anwenden wird der Shop erneut geprüft, und eine Vorschau, die er inzwischen überholt hat, wird abgelehnt.

4

Rückgängig

Die Antwort bringt den Weg zurück gleich mit, ausgeschrieben als der Aufruf, der alles zurückstellt. Die wenigen, die das nicht können, sagen warum: eine verschickte E-Mail, erstattetes Geld, ein ersetzter Schlüssel.

Berechtigungen formen die Angriffsfläche

Ein Token sieht nur die Tools, die seine Berechtigungen hergeben, ein enges Token ist also eine kleine Angriffsfläche und zugleich eine kleine Macht. Tags und Menüs sind getrennte Berechtigungen, weil ein veröffentlichtes Menü sofort ändert, was Kunden sehen. Einen Beitrag entwerfen und ihn veröffentlichen: zwei Berechtigungen. Nichts, was eine KI tun kann, bestätigt eine Buchung in der Buchhaltung; das macht ein Mensch im Adminbereich.

Beispiele

Du fragst

„Zeig das neue Bosch-Sortiment im Shop.“

list_products set_shown_in_shop

Ergebnis: eine Vorschau der versteckten Produkte nach Marke, dann ein Aufruf, der das ganze Sortiment sichtbar macht, und die IDs, mit denen es wieder verschwindet.

Du fragst

„Zieh die Adressen meiner alten Website um, damit Google weiterhin jedes Produkt findet.“

check_redirects import_redirects

Ergebnis: dein alter Export Zeile für Zeile geprüft, Ketten zu einem einzigen Sprung zusammengefaltet, die Zeilen ohne Treffer für dich aufgelistet, dann ein Probelauf, bevor irgendetwas gespeichert wird.

Du fragst

„Zeichne ein Winterbanner und mach die Kampagne für Freitag fertig.“

generate_image draft_campaign schedule_campaign

Ergebnis: das Banner direkt im Chat, eine fertig entworfene Kampagne und ein Versandtermin erst, nachdem du ihre Vorschau gesehen hast.

↑ Beispielanfragen · die genannten Tools gibt es wirklich

Noch zwei MCPs. Operatoren steuern die Plattform über das eigene MCP der Konsole, an das kein Token eines Shops herankommt. Und jeder Shop kann ein öffentliches MCP für KI-Shopping-Agenten einschalten, damit sie seinen Katalog lesen und einen Warenkorb füllen.
08 SHOP ZU SHOP

Shop zu Shop.
Ohne Zwischenhändler.

Jeder Shop kann für seine Geschäftskunden eine Trade API öffnen: eine neutrale, versionierte HTTP-API, die deren eigene Systeme aufrufen, um den Katalog zu ihren Preisen zu lesen und Bestellungen aufzugeben. Und jeder Shop kann bei jedem anderen Shop einkaufen, der sie spricht – als ein Lieferant mehr.

  • Ein Protokoll, keine MarkeDiscovery unter /.well-known/trade-api, die API unter /trade/v1, ein Dokument in OpenAPI 3.1 und nirgends darin der Name einer Plattform. Ein Verkäufer, der sie spricht, ist ein Verkäufer, egal was bei ihm läuft.
  • Schlüssel macht der Kunde selbstEin Admin gibt ein Unternehmen als Händlerkonto frei, legt die Preisstufe fest, zu der es einkauft, und erlaubt die API. Der Kunde erstellt und widerruft seine Schlüssel selbst auf seiner Kontoseite; der Shop behält nur einen Hash, und kein Admin bekommt je einen Schlüssel zu sehen.
  • Ihre Preise, echter BestandJedes Produkt kostet genau das, was die Storefront diesem Kunden im angemeldeten Zustand zeigt, daneben der verkaufbare Bestand der Storefront, gedeckelt.
  • Bestellungen, die sich nicht verdoppelnJede Bestellung trägt einen Idempotenzschlüssel: Derselbe Schlüssel mit demselben Inhalt liefert die erste Bestellung zurück, ein anderer Inhalt wird abgelehnt. Ab da ist es eine ganz normale Bestellung des Shops, wie gewohnt in Rechnung gestellt, gepackt und verschickt.
  • Bei jedem Shop einkaufenEin generischer Trade-Lieferanten-Connector macht aus einem Verkäufer einen Lieferanten mehr: Bestand und Preise werden nach Zeitplan gelesen, Bestellungen gehen unter einem Idempotenzschlüssel raus, Bestätigungen und Lieferungen werden zurückgelesen. Er ruft die öffentliche Adresse des Verkäufers auf wie jeder Fremde, nie über eine Abkürzung innerhalb der Zelle.
  • Kurze LeineLimits pro Schlüssel für Anfragen und Bestellungen, eine Obergrenze für unbezahlte Bestellungen, und der Schlüssel des einen Shops ist beim anderen ein Fremder. Jeder Eingriff an Konten, Zugängen und Schlüsseln landet im Audit-Trail des Shops, und der Kunde erfährt von jedem neuen Schlüssel.
  • Ehrlich gesagtNoch keine Webhooks: Ein Käufer fragt per Polling ab, was sich geändert hat. Bezahlt wird vorerst per Vorkasse-Rechnung; Kauf auf Rechnung kommt später.
Wie immer beide Türen. Trade-Einstellungen, Konten und Zugänge gibt es im Adminbereich und über das Admin-MCP, mit jeweils eigenen Berechtigungen.
09 EIN NEUER SHOP

Ein Shop in Minuten.
Offen, wenn du so weit bist.

Kein Installer, kein Server zum Aussuchen. Wir legen deine Organisation in der Plattformkonsole an, der Shop baut sich selbst, und ab da übernimmst du.

1

Organisation und Shop

Dein Unternehmen, der Name des Shops und seine Hauptsprache. Deine eigene Domain kann jetzt kommen oder später.

2

Der Shop baut sich selbst

Schema, Logins, Signaturschlüssel und Feed-Pfad entstehen abseits der Anfrage, im Hintergrund. Für die Öffentlichkeit bleibt er zunächst geschlossen.

3

Sofort eine Adresse

yourshop.cartsome.com antwortet, sobald der Shop aktiv ist: ein Wildcard-Zertifikat, kein DNS-Schritt.

4

Der Schlüssel und der erste Admin

Ein einmaliger Onboarding-Schlüssel, persönlich oder per Anruf übergeben, nie per E-Mail. Dein erster Admin öffnet /setup und legt einen Passkey an.

5

Vor der Eröffnung

Zahlungen über Montonio, Versandtarife, Sprachen, Angaben zum Shop, ein Produkt zum Kaufen. Jeder Schritt ist eine Seite und ein MCP-Tool.

6

Eröffnen, dann deine Domain

Eröffne, sobald die Checkliste erledigt ist. Richte deine Domain mit einem DNS-Eintrag auf uns aus, und wir fügen sie an der Edge hinzu; sobald sie antwortet, wird sie zur Hauptadresse.

Sprachen auf Knopfdruck. Ein neuer Shop startet mit seiner Hauptsprache und Estnisch. Schalte jede der 8 ein, sobald ihre Übersetzungen fertig sind, unter Einstellungen › Sprachen oder mit manage_languages. Ein Produkt behält in jeder Sprache dieselbe Adresse.

10 DER UMZUG

Bring deinen Shop mit.
Google zieht mit.

Autotools ist von Shopify umgezogen und betreibt heute 25.000+ Produkte auf CartSome. Die Werkzeuge, die es dafür brauchte, bekommst du auch.

  • Produkte, von KI konvertiert und von einem Menschen geprüftDein KI-Client liest das Importformat, das Vokabular des Shops und die Daten des Lieferanten und schreibt eine Datei, die der eigene Validator des Shops akzeptiert. Er hält an und benennt jede Lücke, statt eine Kategorie zu erfinden. Ein Mensch prüft, was zugeordnet wurde und was neu ist, und angewendet wird nur ein Import, den er ausdrücklich benennt, indem er eine Vorschau bestätigt, die er gelesen hat.
  • Versteckt, bis du „zeigen“ sagstNeue Produkte kommen versteckt an. Ein einziger Aufruf mit Vorschau macht ein ganzes Sortiment von bis zu 5.000 sichtbar.
  • Alte Adressen, weitergeleitetGib den Weiterleitungsexport von Shopify oder irgendeine zweispaltige Liste ab. Jede Zeile wird so zugeordnet, wie die Storefront Adressen auflöst, Ketten werden zu einer einzigen permanenten Weiterleitung zusammengefaltet, und jedes Ziel wird gegen die eigenen Seiten des Shops geprüft.
  • Das Shopify-UmzugskitUnsere Umzugswerkzeuge machen einen Snapshot der alten Website, bauen die Zuordnung von alten zu neuen Adressen samt Bericht über den Rest und fragen dann beim neuen Shop jede Zeile ab: Verlangt ist genau eine 301 auf eine Seite, die antwortet. Autotools hat so 12.598 alte Adressen mitgenommen.
  • Newsletter-Einwilligungen, einmal umgezogenDie Marketingliste zieht in das Einwilligungsregister des Shops um, mit der Antwort jeder Person genau so, wie sie gegeben wurde. Beim Umzug wird nichts verschickt.
  • Was zurückbleibtFrühere Bestellungen bleiben auf der alten Plattform. Bewahre ihren Export für deine Buchhaltung auf.

Ein Beispielumzug

Woche eins

Auftakt

Zugang zum alten Shop und eine Einigung darüber, was mitkommt.

Woche eins

Übernahme

Katalog, Bilder und Kunden in einen neuen Shop unter seiner cartsome.com-Adresse.

Woche zwei

Deine Prüfung

Alter Shop gegen neuen, Seite für Seite, und eine Testbestellung. Wir beheben, was du findest.

Woche zwei

Umschalten

Weiterleitungen geprüft, dann ein DNS-Eintrag. Der alte Shop verkauft bis zu diesem Moment.

↑ Ein Beispiel · die Größe deines Katalogs bestimmt das Tempo

So läuft ein Umzug
11 FRAGEN

Entwickler fragen.
Wir antworten.

Wie sieht der Stack genau aus?

Java 25 mit Spring Boot für die beiden Cores, TanStack Start mit React 19 für shop web und die Konsole, Aurora PostgreSQL 18, Valkey 9, S3 und CloudFront, dazu SQS und Lambda für die Bild-Worker. Die Dienste laufen auf ECS Fargate auf ARM, alles in Terraform beschrieben. Überall rohes SQL: kein ORM.

Wie schnell ist es wirklich?

Lass Lighthouse selbst über autotools.ee laufen. Am 29. Oktober 2026 zeigten Startseite und Produktseiten im Smartphone-Profil null Layout-Verschiebung, unter 30 ms Blockierzeit und 100 für Barrierefreiheit, Best Practices und SEO; cartsome.com erreichte in allen vier Kategorien 100. Dahinter stehen ein Byte-Budget in der CI, ein Speed-Gate und ein Worst-Case-Gate vor dem Release und ein Budget von 250 ms bei p95 für Listenseiten auf einem Katalog mit 500.000 Produkten.

Warum wurde core zweigeteilt?

Damit der Traffic eines Shops und das Geschäft der Plattform nie einen Prozess oder einen Datenbank-Login teilen und keine Seite die Secrets der anderen öffnen kann. Shop-core bedient die Shops und kann die Secrets der Plattform nicht öffnen; platform-core betreibt die Konsole und die Abrechnung und kann keinen Shop lesen. Fällt die Steuerungsebene aus, verkaufen die Shops weiter.

Ist es mandantenfähig, und wie isoliert ist ein Shop?

Ja. Jeder Shop hat sein eigenes PostgreSQL-Schema und zwei eigene Logins, die Isolation ist also Aufgabe der Datenbank, nicht eines Filters im Code. Caches, Sessions und signierte Links sind an den Shop gebunden, und eine Leak-Suite liest bei jeder Änderung jede mandantenbezogene Tabelle aus Sicht eines anderen Shops.

Was passiert, wenn eine Zelle voll wird?

Sie nimmt keine neuen Shops mehr an, und die nächste Zelle öffnet. Wir planen sie, sobald ein Signal (Shops, Datenbankkapazität, Verbindungen, Cache-Speicher, Migrationen) 80 Prozent seiner Obergrenze erreicht, damit eine Zelle schon vor dem Vollwerden keine Shops mehr annimmt.

Wo liegen meine Daten?

Heute in der Region Stockholm von Amazon Web Services (eu-north-1). Die Zeilen deines Shops liegen in seinem eigenen Schema, seine Schlüssel im versiegelten Tresor deiner Organisation.

Bekomme ich meine Daten wieder raus?

Ja. Wenn ein Shop geht, wird sein gesamtes Schema mit pg_dump exportiert, und pg_restore spielt diese Datei in jede PostgreSQL-18-Datenbank ein.

Können meine Geschäftskunden aus ihren eigenen Systemen bestellen?

Ja, sobald du es erlaubst. Gib sie als Händlerkonto frei, dann erstellen sie ihre eigenen Trade-API-Schlüssel, lesen deinen Katalog zu ihren Preisen und geben Bestellungen auf, jede unter einem Idempotenzschlüssel, damit ein erneuter Versuch nie doppelt bestellt.

Landen Kundendaten bei meinem KI-Anbieter?

Konstruktionsbedingt nicht. Tool-Antworten lassen Namen, E-Mail-Adressen, Telefonnummern, Anschriften und Steuernummern von Kunden weg, und Tests schlagen fehl, wenn doch etwas durchrutscht. Die ausdrücklichen Ausnahmen sind die Aktivitäten einer Bestellung, der Wortlaut eines Kommentars und die Namen von Mitarbeitern an Kommentaren.

Kann die KI eine Bestellung erstatten oder einen Zahlungsschlüssel ändern?

Nur mit einem Token, das du mit genau dieser Berechtigung erstellt hast. Erstattungen sind eine eigene Berechtigung; Secrets und Admins gibt es nur über ein eingefügtes Token, das ein Admin bewusst erstellt hat, nie über eine App-Verbindung per Klick.

Welche KI-Clients funktionieren?

Jeder Client, der MCP spricht, darunter Claude, ChatGPT, Cursor und Gemini. Sie verbinden sich per Anmeldung oder mit einem eingefügten Token und sehen nur die Tools, die ihre Berechtigungen erlauben.

Wie funktioniert die Suche ohne Suchcluster?

PostgreSQL-Volltextsuche in der Sprache des Kunden, mit Trigramm-Abgleich für Tippfehler und Artikelnummern. Ein System weniger im Betrieb, und sie wird gegen einen Katalog mit 500.000 Produkten gebenchmarkt, bevor Änderungen live gehen.

Kann ich es erweitern?

Ja. Installiere eine geprüfte App aus dem Marktplatz oder baue deine eigene mit deinem KI-Client. Jede läuft in ihrer eigenen Sandbox und wird ausgeschaltet installiert.

BEREIT, WENN DU ES BIST

Machen wir
Handel spannend.

Erzähl uns von deinem Shop. Wir ziehen ihn für dich um, und du sprichst direkt mit den Leuten, die CartSome entwickeln.

Sprich mit uns