Saleor Store
우리 컬렉션을 쇼핑하세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기KI-Interface für Shopware, Shopify, Magento & OpenMage: Produkte, Preise, SEO und Landingpages per Chat. Die KI liest nur, geschrieben wird nach Freigabe.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Der KI-Lotse für deinen Onlineshop – Shopware 6, Shopify, Magento 2 und OpenMage. Du gibst den Kurs vor – Lotse bringt deinen Shop sicher hin. Seiten & Einkaufswelten, Preise, Texte & SEO per Chat. Die KI liest nur, geschrieben wird erst nach deiner Freigabe. 46 Sekunden: Preise per Chat, Vergleich prüfen, Seite als Entwurf – Klick öffnet das Video Screenshots aus dem Demo-Shop (Dockware). Das Video zeigt einen Beispiel-Entwurf mit fiktiver Marke und eigenen Illustrationen.README 전문 보기 ↗
| Arbeitsfläche mit Shop-Check | SEO-Bereich | Kontext wählen | KI-Zugriff je Bereich |
|---|---|---|---|
Screenshots aus einer frischen Lotse-Instanz mit dem Demo-Shop (Dockware), deutsche Oberfläche. Das Video zeigt einen Beispiel-Entwurf mit fiktiver Marke und eigenen Illustrationen.
docker run -d --name lotse --restart unless-stopped \
-p 127.0.0.1:3333:3333 -e LOTSE_BIND=127.0.0.1 -v lotse-data:/data \
--read-only --tmpfs /tmp:size=256m,mode=1777 --tmpfs /app/.next/cache:size=64m,uid=1000,gid=1000 \
--cap-drop ALL --security-opt no-new-privileges:true \
--pids-limit 512 --memory 2g --cpus 2 \
ghcr.io/coding9gmbh/lotse:latest
latestist der aktuelle Stand vonmain; für eine feste Version nimm stattdessenX.Y.Z(siehe Releases & Image). Gibt es das Image noch nicht, baust du es mitmake upaus dem Quellcode.
Dann http://localhost:3333 öffnen und unter Einstellungen:
Alles (App, KI-Laufzeit, SQLite-Datenbank) steckt im Image; Daten, verschlüsselte Zugangsdaten und Verlauf liegen im Volume lotse-data und überstehen Updates.
Shop auf demselben Rechner? Im Container ist
localhostder Container selbst – nutzehttp://host.docker.internal:<port>.
Lotse lässt sich auch selbst hosten, z. B. für ein Team: LOTSE_PASSWORD (Login per Umgebungsvariable) und ALLOWED_HOSTS setzen, HTTPS per Reverse-Proxy (Caddy, nginx, Traefik) davor. Konfiguration, Proxy-Beispiele, Sicherung und Fehlerbilder: docs/self-hosting.md.
make env # .env aus .env.example (optional – alles geht auch in der Oberfläche)
make up # Image bauen und starten → http://localhost:3333
make demo # zusätzlich Demo-Shop (dockware) → http://localhost:8888
make logs # Logs · make down stoppen · make backup Daten sichern
make sandbox-up # Lotse mit Docker-Zugang für Sandbox Coding (Socket-Proxy, internes Netz)
make help # alle Befehle
Mit dem Demo-Shop in Lotse eintragen: Shop-URL http://shopware, öffentliche URL http://localhost:8888, Benutzer admin / shopware.
Ohne Docker: npm install && npm run dev (Node ≥ 22.13) → http://localhost:3333. Vor jedem Commit: npm run check (Typecheck, ESLint, Tests).
| Schutz | Wie |
|---|---|
| KI ohne Schreibrechte | Das Modell bekommt nur einen geschützten Lese-Client mit Freigabeliste (Shopware ReadOnlyShopware, Shopify ShopifyReader, Magento MagentoReader, OpenMage OmReader); Kunden-, Bestell-, Zahlungs- und Zugangsdaten sind fest gesperrt, jeder Lesezugriff wird protokolliert. |
| Freigabe vor jedem Schreiben | Änderungen erscheinen als Alt→Neu-Vergleich; erst „Anwenden“ schreibt. Audit-Log + Rückgängig. |
| Shop wird geschont | Schreibzugriffe gedrosselt (LOTSE_WRITE_CONCURRENCY, Standard 2), max. 300 Einträge je Änderungsset, Timeouts (LOTSE_SHOP_TIMEOUT_MS), Backoff bei 429/503. |
| Lokal & gehärtet | Port nur auf 127.0.0.1, Host-/Origin-Prüfung, Container als Nicht-Root, read-only, ohne Capabilities, mit Ressourcen-Limits. |
| Zugangsdaten | AES-256-GCM-verschlüsselt im Volume, gehen nie an die KI. |
| Abverkauf | Standardmäßig aus; einschaltbar unter Einstellungen → KI-Zugriff → Abverkauf. Lotse liest dann mit einer festen Abfrage nur Summen je Produkt (Stückzahl, Umsatz, Anzahl Bestellungen), nie Kunden, Adressen oder einzelne Bestellungen. |
| Internetrecherche | Standardmäßig aus; einschaltbar unter Einstellungen → KI-Zugriff → Internet (Websuche und Abruf öffentlicher Webseiten, nur lesend). |
| Codex (ChatGPT-Abo) | Eigene Codex-Werkzeuge (Shell, Dateien, Web, Bilder, Plugins …) abgeschaltet (Websuche nur bei eingeschalteter Internetrecherche), Dateizugriff per Berechtigungsprofil komplett gesperrt, keine Rückfragen nach mehr Rechten; Shop-Tools nur über einen lokalen MCP-Endpunkt mit Zufalls-Token je Chat. Taucht trotzdem ein gesperrtes Werkzeug auf, bricht Lotse die Runde ab. |
| Sandbox Coding | Standardmäßig aus. Container nur im internen Netz ohne Internet (Internet nur nach Freigabe), die KI hat dort keine Shop-Werkzeuge und führt Befehle nur im Container aus, Befehle aus dem Repository laufen erst nach Freigabe, veröffentlicht wird nur per Klick. Details: Sandbox Coding. |
| Serverbetrieb | LOTSE_PASSWORD (Login) + ALLOWED_HOSTS setzen, HTTPS per Reverse-Proxy. Anleitung: . |
Für Live-Shops: eigene Integration mit eingeschränkter Rolle statt Admin-Login, neue Abläufe zuerst im Staging testen. Details: SECURITY.md.
Warum kein Claude-Abo? Anthropic erlaubt Drittprodukten auf Basis des Claude Agent SDK ohne vorherige Freigabe keinen claude.ai-Login und keine Abo-Kontingente (Agent-SDK-Dokumentation). Lotse nutzt Claude deshalb nur mit API-Schlüssel – und ignoriert bewusst eine eventuell vorhandene Claude-Code-Anmeldung auf dem Rechner.
Alle Variablen mit Erklärung in .env.example. In der Oberfläche gesetzte Werte haben Vorrang.
Die Sprache (Deutsch/Englisch) ist keine Variable: Sie wird in den Einstellungen bzw. der Seitennavigation gewählt, Standard ist die Browsersprache (Cookie lotse_lang).
| Variable | Zweck |
|---|---|
AI_PROVIDER | claude (Standard) oder codex (ChatGPT-Abo) |
ANTHROPIC_API_KEY | KI-Zugang Claude (API-Schlüssel) |
CODEX_MODEL | optionales Codex-Modell (leer = Standard des Abos) |
SHOPWARE_URL, SHOPWARE_CLIENT_ID, SHOPWARE_CLIENT_SECRET | Shop-Zugang (Integration) |
SHOPWARE_PUBLIC_URL | Shop-Adresse aus Sicht des Browsers, falls abweichend |
SHOP_PLATFORM | verbundene Plattform: shopware (Standard), shopify, magento (Magento 2) oder openmage (Magento 1 mit dem Modul aus integrations/openmage/); Variablen SHOPIFY_*, MAGENTO_*, OPENMAGE_* siehe src/lib/platforms.ts |
AI_MODEL | z. B. sonnet oder opus |
LOTSE_AI_BUDGET_USD | Kostenbremse: Monatsbudget für Claude in US-Dollar (Einstellungen → KI verbinden hat Vorrang); leer = keine Grenze |
LOTSE_PASSWORD, ALLOWED_HOSTS | Zugangsschutz für Serverbetrieb (Selbst hosten) |
LOTSE_BIND, LOTSE_PORT | Veröffentlichte Adresse und Port des Containers (Standard 127.0.0.1, 3333) |
LOTSE_WRITE_CONCURRENCY, LOTSE_SHOP_TIMEOUT_MS | Shop-Schonung |
LOTSE_LOG_RETENTION_DAYS, LOTSE_AUDIT_RETENTION_DAYS | Aufbewahrung von Zugriffs- (Standard 180 Tage) und Änderungsprotokoll (365 Tage); 0 = nie löschen |
OPENAI_API_KEY, IMAGE_MODEL | optionale Bild-KI |
LOTSE_SANDBOX, DOCKER_HOST, LOTSE_SANDBOX_* |
Die Pipeline (.github/workflows/docker.yml) veröffentlicht das Image automatisch, sobald die Prüfungen grün sind; von Hand geht es über GitHub → Actions → Docker-Image → Run workflow. Pull Requests führen nur Typecheck, Lint, Tests, Build und Smoke-Test aus.
main (also jeder Merge): veröffentlicht ghcr.io/coding9gmbh/lotse als latest und mit dem Kurz-Hash des Commits.vX.Y.Z: veröffentlicht zusätzlich die festen Versionen X.Y.Z und X.Y.Gebaut wird für amd64 und arm64, mit SBOM und Provenance. Neue GHCR-Pakete sind zunächst privat und müssen einmalig in den Paket-Einstellungen auf Public gestellt werden.
Die ausführliche Dokumentation liegt unter docs/: Benutzerhandbuch (wie alles funktioniert, auch Sandbox Coding), Selbst hosten, Architektur und Plattform-Schicht. Was sich je Version geändert hat, steht im CHANGELOG.
Chat statt Formulare. Du schreibst, was passieren soll („Ändere das Layout von Produkt XY“, „Senke alle Preise um 20 %“, „FAQ bei allen Produkten“). Der Agent versteht → fragt gezielt zurück (klickbare Antworten) → recherchiert (nur lesen) → zeigt Vorschau bzw. Alt→Neu-Vergleich → du gibst frei → der Server schreibt (Audit-Log, Rückgängig).
Sicherheitsmodell: Die KI hat ausschließlich Lesezugriff (ReadOnlyShopware, kein create/update/upload). Schreiben passiert nur im Executor (src/server/changes.ts) nach Klick auf „Anwenden“; jede Anwendung wird im Audit-Log (SQLite, data/aicb.db) protokolliert und ist per „Rückgängig“ umkehrbar. Hochgeladene Bild-Anhänge und KI-erzeugte Bilder liegen bis zur Freigabe lokal in data/staging/ und kommen erst mit einem freigegebenen Änderungsset in den Shop.
pdp-faq, Inhalt je Produkt im JSON-Zusatzfeld aicb_blocks (mit FAQPage-Schema).--sg-*) in Custom-HTML.Für Code statt Shop-Daten: Eine Sandbox ist eine Entwicklungsumgebung mit Git, in der Claude Code oder Codex arbeiten – eine Arbeitskopie deines Repositorys und ein eigener Shopware-Test-Shop in Docker (Dockware). Du startest sie aus einem normalen Chat; die KI ändert Dateien, führt Befehle im Container aus, prüft das Ergebnis in der Vorschau und speichert jeden fertigen Schritt als Commit. Den Live-Shop erreicht sie aus einer Sandbox nicht.
| Sandbox starten | Vorschau der Sandbox | Konsole im Container |
|---|---|---|
shopware/production), eigenes Setup (Zielordner und Befehle legst du fest) oder ganz ohne Projekt mit lokalem Git. Ein Repository kann seine Einrichtung in .lotse/sandbox.json beschreiben; Befehle daraus laufen erst nach deiner Freigabe.bin/console, Logs, Composer) – nur für Menschen, nicht für die KI.bin/console plugin:create), holt die KI auf Zuruf mit denselben Prüfungen wie ein Commit ins Projekt.lotse/… oder als Plugin-ZIP zum Hochladen in den Shop. Die KI kann das ZIP per Karte im Chat vorschlagen („gib mir das Plugin als ZIP für den Live-Shop“); geprüft (composer.json) und heruntergeladen wird erst mit deinem Klick. Rückmeldungen zum Pull Request gibst du mit einem Klick an die KI weiter.LOTSE_PASSWORD. Mit make sandbox-up startet Lotse im Docker-Betrieb mit Socket-Proxy und internem Netz. Die Container sind offline, Internet gibt es nur nach Freigabe.Einrichtung: Sandbox Coding aktivieren · Bedienung und alle Fälle: Benutzerhandbuch · Sicherheitsmodell: SECURITY.md
Die Plattform wird in den Einstellungen unter „Shop verbinden“ gewählt (oder per SHOP_PLATFORM). Shopware 6 ist der Standard und am weitesten ausgebaut; was genau welche Plattform kann, zeigt die Fähigkeitsmatrix in docs/platform.md.
Alpha: Aktiv getestet wird bisher nur Shopware 6. Die Anbindungen für Shopify, Magento 2 und OpenMage funktionieren, sind aber noch nicht im Alltag mit echten Shops erprobt; die Einstellungen kennzeichnen sie als „Alpha“. Am besten erst an einem Testshop ausprobieren und Vorschau und Vergleich vor jeder Freigabe besonders sorgfältig prüfen.
| Shopsystem | Einrichtung (Kurzform) |
|---|---|
| Shopware 6 (Standard) | Im Admin unter Einstellungen → System → Integrationen eine Integration anlegen, Shop-URL, Zugangs-ID und Schlüssel eintragen (alternativ Admin-Benutzer; SHOPWARE_*). |
| Shopify (Alpha) | App im Shopify Dev Dashboard installieren und Client-ID/-Secret eintragen, oder das Admin-API-Token einer bestehenden eigenen App; dazu die *.myshopify.com-Domain (SHOPIFY_*). |
| Magento 2 (Adobe Commerce, Alpha) | Im Admin unter System → Erweiterungen → Integrationen eine Integration mit Zugriff auf Katalog, Inhalte und Marketing anlegen und das Zugriffstoken eintragen (alternativ Admin-Benutzer); optional Store-View und Preisbasis (MAGENTO_*). |
| OpenMage (Magento 1, Alpha) | Modul Lotse_Connector aus integrations/openmage/ installieren, API-Token erzeugen, Shop-URL und Token eintragen (OPENMAGE_*, siehe unten). |
OpenMage hat keine brauchbare Schnittstelle für CMS-Seiten/-Blöcke, darum liegt im Repository das Modul Lotse_Connector (integrations/openmage/) mit token-gesicherter JSON-API unter /lotse-api/v1. Installation in Kurzform (Details, Sicherheit und Endpunkte in integrations/openmage/README.md):
integrations/openmage/ kopieren bzw. das Zip aus ./package.sh entpacken, per modman link, oder per Composer (Typ magento-module).php shell/lotse.php --generate-token).OPENMAGE_URL, OPENMAGE_TOKEN, optional OPENMAGE_STORE_CODE).Das Modul kennt keine Routen für Kunden, Bestellungen, Zahlungen oder Benutzer – diese Daten erreichen Lotse gar nicht.
Die Produktseite von Lotse liegt auf coding9.de/produkte/lotse und wird mit der CODING-9-Website gepflegt.
Next.js 16 (App Router) · React 19 · TypeScript (strict) · SQLite (node:sqlite) · Claude Agent SDK oder OpenAI Codex SDK (ChatGPT-Abo).
src/
├── proxy.ts Host-/Origin-Prüfung, optionaler Login, Storefront-Pfade → /shop
├── app/
│ ├── page.tsx Arbeitsfläche (Chat, Kontext, Vorschau)
│ ├── settings/ Einstellungen: Shop, KI, Bild-KI, KI-Zugriff, Protokolle
│ ├── api/**/route.ts REST + Chat-Stream (NDJSON)
│ ├── shop/ Storefront-Proxy für die Live-Vorschau
│ ├── sbx/ Proxy für die Vorschau einer Sandbox (Sandbox Coding)
│ └── staged/ vorgemerkte Bilder (vor Freigabe nur lokal)
├── components/ UI nach Bereichen (shell = Navigation, chat, context, preview, dialogs, sandbox, settings, ui), CSS Modules
├── hooks/ useChatStream, useAttachments
├── lib/
│ ├── i18n/ Sprachen (de, en), Wörterbücher je Namensraum unter messages/
│ ├── protocol.ts Vertrag Server ↔ Oberfläche (REST-Typen, Chat-Ereignisse)
│ └── chat-state.ts ein Reducer für Live-Stream und Wiederherstellung eines Chats
└── server/ nur serverseitig (`server-only`)
├── agent.ts Chat-Runde: Claude Agent SDK (In-Process-MCP), Streaming des Entwurfs
├── agent-codex.ts Chat-Runde mit Codex (ChatGPT-Abo); Shop-Tools über /api/mcp/<chat> (Token je Chat)
├── codex.ts Codex-Anmeldung (Gerätecode), gesperrte Konfiguration ohne Shell/Dateien/Web
├── platform/ Plattform-Schicht: Adapter-Vertrag + Shopware, Shopify, Magento 2, OpenMage, siehe docs/platform.md
├── tools.ts Kern-Tools + Zusammenbau je Plattform (lesen frei, schreiben nur über Änderungssets)
├── policy.ts Schutzschicht: Freigabeliste, gesperrte Daten, Zugriffsprotokoll
├── changes.ts Executor: einziger schreibender Code (gedrosselt, Audit, Rückgängig)
├── shopware.ts Admin-API-Client (Timeouts, Backoff) + ReadOnlyShopware für die KI
├── cms.ts / patterns.ts Block-Katalog, Spec → `cms_page`, HTML-Vorschau
├── sandbox/ Sandbox Coding: Docker-Runner, Vorlagen, Einrichtung, Abgleich, Konsole, Veröffentlichen
└── db.ts / settings.ts SQLite, verschlüsselte Zugangsdaten
prompts/ System-Prompt als versioniertes Markdown: common/ (alle Plattformen) + shopware/, shopify/, magento/, openmage/; code/ für Sandbox-Chats
integrations/openmage/ OpenMage-Modul Lotse_Connector (JSON-API, openapi.yaml, Tests, package.sh)
tests/ alle Tests (node:test), Struktur wie src/
└── support/ Fake-Shops (Shopify, OpenMage) samt Tests und Live-Prüfskripte
Neue Blocktypen: in BLOCKS (src/server/cms.ts) ergänzen (+ Vorschau-Renderer) – der Agent bekommt den Katalog automatisch.
Neue Shop-Plattform: Vertrag, Konventionen und Checkliste in docs/platform.md.
Neue UI-Sprache oder Übersetzungen: siehe CONTRIBUTING.md.
Lotse wird ohne Gewährleistung bereitgestellt, die Nutzung erfolgt auf eigene Verantwortung. KI-Ergebnisse können falsch sein und müssen vor der Freigabe geprüft werden; neue Abläufe zuerst im Staging-Shop testen und vorher ein Backup anlegen. Für die Übermittlung von Shop-Inhalten an den KI-Anbieter bist du als Betreiber verantwortlich. Alle Hinweise: DISCLAIMER.md.
MIT © CODING 9 GmbH
docs/self-hosting.mdSandbox Coding: 0 = hart aus, Docker-Zugang, Grenzen und Netze (Sandbox Coding aktivieren) |
get_cms_page) und bezieht vorhandene Inhalte ein.html-Element (Block custom-html, CSS automatisch gescoped).lotse_lang).#2E2E38, Grün, Koralle, Creme; Satoshi/Inter via Fontshare/Google Fonts).