Rueckmeldung vom Kunden: der Screenshot war als Funktionsaenderung gemeint, nicht nur als Optik. Statt eine Karte nach der anderen durchzuschieben, liegen jetzt alle nebeneinander und werden einzeln gemerkt, ausgeblendet oder geoeffnet. Raus: - Kartenstapel, Maus-Drag, Pfeiltasten, Exit-Animation - Undo samt History - "gemerkt" ist ein Zustand, den ein zweiter Klick zuruecknimmt, keine Entscheidung in einer History - die drei Aktions-Buttons, das Kuerzel-Panel, die feste Detailspalte Rein: - Masonry-Raster (columns 3-6, Standard 5) mit gestaffelten Hoehen - Merken-Pille und ⋯ beim Hover auf der Kachel; ⋯ bietet "Nicht mehr zeigen" und "Details oeffnen" - Detailansicht als Overlay mit Medium, Beschreibung, Tags, Kennzahlen - Auswahlmodus mit Auswahlkreisen und Sammelaktion "Zur Sammlung hinzufuegen" - Escape schliesst der Reihe nach Detailansicht, Menue, Auswahlmodus Karten haben jetzt eine id; Merken, Ausblenden, Auswahl und Detail referenzieren darueber statt ueber einen Index. Die Profil-Galerie zeigt dadurch genau die gemerkten Karten, die Kennzahl "Gemerkt" zaehlt sie. Beispieldaten auf 10/8/6 Karten erweitert, damit das Raster traegt. Offen und im README vermerkt: Suche ist weiterhin eine Attrappe, Ausblenden ist fluechtig, Nachladen fuer echte Datenmengen fehlt. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
BrandLoop (videogen)
KI-Video-Generierung mit lernender Brand-Knowledge-Base (Elo-Scoring über Attribute).
- Prototyp: prototyp-app.html – statische Preview unter
videogen.project.webklar.com - Desktop-Ansicht: Design-Handoff für die Desktop-Adaption in design/desktop-ansicht/ (Spezifikation: README.md)
- Backend: selbst gehostetes Appwrite (
https://appwrite.webklar.com/v1), Projekt BrandLoop6a5cee34002bb8360c34, Datenbankbrandloop
Datenbank-Setup
Das komplette Schema (15 Tabellen, Indizes, 4 Storage-Buckets, internes Dev-Team) legt scripts/setup-appwrite.mjs an – idempotent, kann nach Plan-Erweiterungen jederzeit erneut laufen:
# API-Key liegt als BRANDLOOP_APPWRITE_API_KEY in /home/webklar/apps/.env, dann einfach:
node scripts/setup-appwrite.mjs
# oder explizit:
APPWRITE_API_KEY=... node scripts/setup-appwrite.mjs
Der API-Key braucht die Scopes Databases/Tables (read+write), Storage/Buckets (read+write), Teams (read+write).
Prompt-Templates (P1–P18)
Alle 18 Prompts des Prompt-Inventars liegen versioniert in prompts/ (Konventionen
und Slot-Registry: prompts/README.md) und werden mit
scripts/seed-prompts.mjs in die Tabelle prompt_templates
geseedet — idempotent: Inhaltsänderung ⇒ neue Zeile version+1, alte Zeilen aktiv=false.
P8 ist eine Familie (1× Regie-Kern + 4 Modell-Adapter seedance/veo/sora/wan) = 22 Zeilen.
Das Skript seedet außerdem die 4 globalen Brand-Regeln in rules.
node scripts/seed-prompts.mjs
Bewusste Abweichungen vom DB-Plan
- Referenzen als indizierte String-Spalten (size 64) statt Relationship-Spalten.
Appwrite-Relationships sind nicht filter-/indizierbar – der Top-N-Index auf
attributes(brand_id, category_id, status, score DESC) und alle Listen-Queries brauchen aber genau das. Many-to-many (videos.attribute_ids) ist ein String-Array (Query.contains). IDs mit 64 Zeichen, weil uuid4 = 36 Zeichen. created_at-Spalten entfallen – Appwrite pflegt$createdAtautomatisch (Indizes nutzen$createdAtdirekt, z. B.score_events,jobs).- Enum-Werte ohne Umlaute (
laeuftstattläuft). attributes.tags: Key-Index statt Volltext-Index – Appwrite verbietet Fulltext auf Array-Spalten; Tag-Suche läuft überQuery.contains.- S3/Hetzner-Backend für Storage ist eine instanzweite Appwrite-Einstellung
(
_APP_STORAGE_DEVICE) und betrifft alle Projekte auf dem Server – wird daher nicht vom Skript gesetzt, sondern muss bewusst am Server konfiguriert werden. Aktuell: lokales Storage.
Rechte-Modell
rules+prompt_templates: Tabellen-Rechte nur für Teaminternal(Dev-Modus) 🔒- Alle anderen Tabellen:
rowSecurityan, keine Tabellen-Rechte – Zeilen bekommen beim Anlegen die Team-Permission der jeweiligen Brand (Multi-Tenant). consents-Bucket: zusätzlich Lese-Recht für Teaminternal.- Append-only per Konvention (Server-Key schreibt):
score_events,video_metrics,jobs.
Noch offen (laut Plan)
- Appwrite Functions:
elo-update,favorit-berechnen,ads-metriken-holen,kategorie-durchschnitt,archivierung,job-dispatcher - Stripe-Anbindung (metered billing über
usage_records)