# LoopBro Design-Schnittstelle

Für Agents, die das Aussehen und die Preise von loopbro.de ändern. Basis: `https://design.loopbro.de`.
Jeder Aufruf außer dieser Anleitung braucht den Kopf `Authorization: Bearer <Schlüssel>`. Antworten sind JSON.

## Was erlaubt ist

Dateien unter `made-you-look/assets/`, angegeben ohne dieses Präfix:

- `css/*.css`: das Aussehen. Die Seiten laden `css/fonts.css`, `css/style.css` und `css/shop.css`.
  Neue CSS-Dateien wirken nur, wenn eine davon sie per `@import` einbindet.
- `img/…` und `brand/…` (webp, jpg, png), `brand/favicon.ico`: Bilder und Logo. Vorhandene ersetzen (gleicher Name,
  gleiche Maße empfohlen) oder neue hochladen und im CSS einbinden, relativ zur CSS-Datei, z. B. `url("../img/muster.webp")`.
  Produktbilder liegen unter `img/products/<produkt>-400.webp`, `-800.webp` und `.jpg`.
- `fonts/*.woff2`: Schriften, eingebunden in `css/fonts.css`.
- Preise: ganze Euro, brutto.

Nicht erlaubt: HTML, JavaScript, SVG-Dateien, Texte, Bezahlen, Server, Löschen. Externe Adressen in CSS (Schriften,
Bilder von anderen Seiten) blockiert die Sicherheitsrichtlinie des Shops, darum alles hochladen. Je Datei höchstens
900 000 Byte, je Änderung höchstens 30 Dateien.

## Ablauf

1. `GET /stand`: alle Design-Dateien mit `sha256` und Größe, dazu `preise` (alle Produkte mit aktuellem Preis).
2. `GET /datei/<pfad>`, z. B. `GET /datei/css/shop.css`: Inhalt einer Datei.
3. `POST /aenderungen` mit JSON:

   ```json
   {
     "beschreibung": "Buttons runder, neues Hero-Bild, Tote 52 €",
     "dateien": [
       {"pfad": "css/shop.css", "text": "…ganze neue Datei…", "basis": "<sha256 aus /stand>"},
       {"pfad": "img/banner-hero-2000.webp", "base64": "…"}
     ],
     "preise": {"tote": 52, "handschrift-canvas": {"20 × 20 cm": 69, "30 × 30 cm": 95}}
   }
   ```

   - Immer die ganze Datei schicken, kein Diff. CSS als `text`, alles andere als `base64`.
   - `basis` (empfohlen): sha256 der Datei, auf der die Änderung aufbaut. Hat sich die Datei inzwischen geändert,
     kommt `409` zurück; dann neu holen und die Änderung darauf aufbauen.
   - Produkte mit Ausführungen brauchen je Ausführung einen Preis, genau mit den Namen aus `/stand`.
   - Antwort `201` mit `id`.
4. `GET /aenderungen/<id>`: Status abfragen, etwa jede Minute.
   - `wartet`, `laeuft`: noch in Arbeit, meist wenige Minuten.
   - `veroeffentlicht`: ist auf loopbro.de.
   - `abgelehnt`: eine Prüfung ist fehlgeschlagen, `meldung` und `protokoll` sagen warum. Nichts ist online gegangen.
   - `unveraendert`: der Inhalt war schon so.

`GET /aenderungen` zeigt die letzten 20 Änderungen. `GET /preise` nur die Preise.

## Was nach dem Einreichen passiert

Ein Abholer auf dem Shop-Server holt die Änderung, baut den Shop und lässt alle Prüfungen laufen: Seitenbau,
SEO-Prüfung, Tests der Bezahlung. Sind alle grün, geht der Shop sofort mit der Änderung online. Änderungen laufen
nacheinander. Bilder und CSS sind nach dem Veröffentlichen unter einer neuen Adresse, der Browser-Cache stört also nicht.

Der Shop ist noch nicht öffentlich, loopbro.de zeigt ihn nur nach Anmeldung.
