* docs: prepare Vendoo 1.41.2 git-ignore boundary hotfix * fix: track native source modules with root-anchored runtime ignores
97 lines
4.9 KiB
Markdown
97 lines
4.9 KiB
Markdown
# Vendoo — Projekt-Kontext
|
|
|
|
Du arbeitest am Projekt "Vendoo" — ein lokaler Multi-Plattform Listing-Generator mit AI, Lagerverwaltung und Publishing-System.
|
|
|
|
Lies zuerst `FEATURES.md` im Projektroot — das ist die vollstaendige Feature-Dokumentation mit Tech Stack, Projektstruktur, DB-Schema, allen 80+ API-Endpunkten und 17 Feature-Beschreibungen.
|
|
|
|
## Tech Stack
|
|
|
|
- **Backend:** Node.js + Express (ESM, `"type": "module"`)
|
|
- **Frontend:** Vanilla HTML/CSS/JS — kein Framework, kein Build-Step, kein TypeScript
|
|
- **Datenbank:** SQLite via `better-sqlite3` (WAL-Modus)
|
|
- **AI:** Anthropic Claude, OpenAI, OpenRouter, Ollama (lokal)
|
|
- **Bilder:** `sharp` (Resize, BG-Remove, Watermark)
|
|
- **Rich-Text:** Quill Editor
|
|
- **E-Mail:** Nodemailer (SMTP)
|
|
- **Extension:** Chrome Manifest v3
|
|
|
|
## Dateistruktur (wo was hingehoert)
|
|
|
|
| Aenderung | Datei(en) |
|
|
|---|---|
|
|
| Neue API-Route | `server.mjs` — Route hinzufuegen + Import erweitern |
|
|
| Neue DB-Funktion | `lib/db.mjs` — Funktion exportieren |
|
|
| Neue DB-Spalte | `lib/db.mjs` — MIGRATIONS-Array erweitern (try/catch ALTER TABLE Pattern) |
|
|
| Neues UI-Tab | `public/index.html` (Sidebar-Button + Section), `public/app.js` (TAB_TITLES + switchToTab + Logik), `public/style.css` |
|
|
| Neuer AI-Provider | `lib/ai-*.mjs` + `lib/ai-router.mjs` erweitern |
|
|
| Neue Plattform | `platforms/*.mjs` + `lib/categories.mjs` + `lib/fees.mjs` + `lib/html-templates.mjs` |
|
|
| Styling | `public/style.css` — CSS Custom Properties fuer Theming |
|
|
|
|
## Konventionen
|
|
|
|
- **Sprache:** UI ist komplett Deutsch
|
|
- **SKU-Format:** `VD-XXXX` (auto-generiert, 4-stellig aufsteigend)
|
|
- **Navigation:** Sidebar mit `data-tab` Attributen, Tab-Inhalte als `<section id="..." class="tab-content">`
|
|
- **Topbar-Titel:** `TAB_TITLES` Map in `app.js` muss fuer neue Tabs erweitert werden
|
|
- **Dark Mode:** CSS-Variablen unter `[data-theme="dark"]`, niemals hardcoded Farben
|
|
- **Auth:** Session-basiert, Rollen `admin`/`editor`, CSRF-Token bei state-changing Requests
|
|
- **DB-Migrationen:** Neue Spalten als Eintrag in `MIGRATIONS`-Array (Zeile ~17-21 in db.mjs):
|
|
```js
|
|
const MIGRATIONS = [
|
|
['spaltenname', 'TEXT'], // oder 'REAL', "TEXT DEFAULT 'wert'"
|
|
];
|
|
// Wird automatisch per try/catch ALTER TABLE ausgefuehrt
|
|
```
|
|
- **API-Pattern:** REST, JSON-Body, Fehler als `{ error: 'message' }`
|
|
- **Frontend-API-Aufrufe:** `api(method, path, body)` Helper in app.js (fuegt Auth + CSRF automatisch hinzu)
|
|
- **Toast-Benachrichtigungen:** `toast('Nachricht')` in app.js
|
|
- **Quill-Editor:** `initQuill(selector, placeholder)` — gibt Editor-Instanz zurueck
|
|
|
|
## Server starten
|
|
|
|
```bash
|
|
npm install # Dependencies installieren
|
|
npm run dev # Dev-Server mit --watch (Port 8124)
|
|
npm start # Produktiv-Server
|
|
```
|
|
|
|
Oder: `setup.bat` fuer gefuehrte Installation.
|
|
|
|
## Wichtige Dateien nach Groesse
|
|
|
|
| Datei | Zeilen | Inhalt |
|
|
|---|---|---|
|
|
| `public/app.js` | ~3240 | Gesamte Frontend-Logik |
|
|
| `server.mjs` | ~1250 | Alle API-Routen + Middleware |
|
|
| `public/style.css` | ~1200 | Komplettes Styling + Dark Mode + Responsive |
|
|
| `public/index.html` | ~845 | HTML-Struktur (Sidebar, Tabs, Modals, Forms) |
|
|
| `lib/db.mjs` | ~390 | Datenbank-Zugriff (alle CRUD-Funktionen) |
|
|
| `lib/categories.mjs` | ~360 | Kategorie-Baeume pro Plattform |
|
|
| `lib/auth.mjs` | ~290 | Auth-System (Users, Sessions, Audit) |
|
|
| `lib/ebay-api.mjs` | ~270 | eBay REST API + OAuth2 |
|
|
| `lib/mailer.mjs` | ~210 | SMTP E-Mail-Versand |
|
|
| `lib/etsy-api.mjs` | ~185 | Etsy REST API v3 + OAuth2 PKCE |
|
|
| `extension/content.js` | ~1170 | Chrome Extension Content Script |
|
|
|
|
## Aktueller UI-Stand
|
|
|
|
- Version `1.3.0`
|
|
- UI 2026 Slice 05: Publish-Center
|
|
- Smart Copy, direkte Veröffentlichung, eBay Queue und Scheduling arbeiten in einer gemeinsamen Oberfläche.
|
|
- Interne Publish-Arbeitsschritte dürfen keine separaten Browserfenster oder redundanten Modale öffnen.
|
|
|
|
## Bildarchitektur ab 1.23.0
|
|
- FLUX/ComfyUI ist der einzige lokale generative Bilddienst.
|
|
- Das FLUX Studio arbeitet textbasiert und getrennt von Produktbild-Werkzeugen.
|
|
- Keine VTO-, Python-, Torch- oder ONNX-Laufzeit wieder einführen, solange kein neuer ausdrücklicher Architekturentscheid dokumentiert ist.
|
|
|
|
- FLUX-Studio-Aufträge und Varianten sind in `flux_prompt_jobs` und `flux_prompt_job_variants` persistent.
|
|
- Fortschritt im FLUX Studio wird als reale Phase dargestellt; keine aus Laufzeit geschätzten Prozentwerte ergänzen.
|
|
- ComfyUI-Prompt-IDs müssen für Abbruch, Historie und Neustart-Wiederaufnahme erhalten bleiben.
|
|
|
|
- Der Advanced Image Editor arbeitet nicht destruktiv: Originaldateien niemals überschreiben oder löschen.
|
|
- Jede gespeicherte Bearbeitung muss eine neue Datei und einen Eintrag in `image_edit_versions` erzeugen.
|
|
- Bildpfade müssen strikt auf `uploads/` begrenzt und gegen Traversal geschützt bleiben.
|
|
- Hintergrundentfernung, Inpainting, Outpainting und Maskeneditor nicht als Platzhalter ergänzen; diese Funktionen benötigen eigene spätere Slices.
|
|
|