diff --git a/Doku/api/rest.md b/Doku/api/rest.md index 26d08a2..835a51d 100644 --- a/Doku/api/rest.md +++ b/Doku/api/rest.md @@ -30,6 +30,8 @@ Basis: `/api/v1`. Antworten sind JSON; Fehler haben die Form `{"error": "Text"}` | GET | `/stats` | Zähler fürs Dashboard | | GET | `/search?q=` | Suche in eigenen Gedanken und Notizen | | GET | `/export` | Datenexport als JSON | +| GET/POST | `/themes` | Eigene CSS-Themes; anlegen oder mit `id` ändern (`name`, `css`, max. 200 KB) | +| DELETE | `/themes/{id}` | Eigenes Theme löschen | | GET/POST/DELETE | `/keys`, `/keys/{id}` | API-Keys verwalten (Klartext nur bei Erstellung) | ## Gedanken, Triage, Aufgaben diff --git a/Doku/database.md b/Doku/database.md index a67c3ea..5c0f51f 100644 --- a/Doku/database.md +++ b/Doku/database.md @@ -12,6 +12,7 @@ Die Datei `migrations/001_init.sql` wird vom Code **nicht** gelesen und ist vera | `users` | Konten | `email` (eindeutig), `username`, `password_hash`, `display_name`, `role` (`admin`/`member`), `is_active`, `token_version`, `alarm_channels` (kommagetrennt), `alarm_email`, `discord_webhook_url`, `custom_webhook_url`, `notify_before_minutes`, `avatar_url`, `organization_id` (leer = keine Organisation) | | `user_invites` | Einladungscodes | `code`, `email`, `role`, `organization_id`, `expires_at`, `used_by` | | `revoked_tokens` | Sperrliste ausgeloggter JWTs | `token_hash`, `expires_at` | +| `user_themes` | Eigene CSS-Themes eines Benutzers | `user_id` (FK, `ON DELETE CASCADE`), `name`, `css_content` | | `api_keys` | Webhook-/API-Schlüssel | `key_prefix`, `key_hash` (SHA-256), `scopes` (nicht ausgewertet), `last_used_at` | | `system_settings` | Schlüssel/Wert für Instanz-Einstellungen | `sharing_mode`, `allow_registration`, `instance_name`, `smtp_*` | diff --git a/Doku/theming.md b/Doku/theming.md index 6a1d755..295eaac 100644 --- a/Doku/theming.md +++ b/Doku/theming.md @@ -104,7 +104,24 @@ Das standardmäßige Marken-Icon von MindSift (`frontend/public/icon.svg`, PWA-I ## 🛠️ 5. Ein eigenes Theme erstellen -Um ein neues Theme (z.B. „Nordic Blue" oder „Cyberpunk") hinzuzufügen: +### Ohne Rebuild: Theme-Manager in den Kontoeinstellungen + +Unter **Kontoeinstellungen → Darstellung & Themes** kann jeder Benutzer eigene Themes anlegen: + +- **Vorlage** herunterladen, kopieren oder direkt ins Eingabefeld einfügen (`theme-template.css`). +- CSS als **`.css`-Datei hochladen** oder **einfügen**, Namen vergeben, „Speichern & aktivieren“. +- Eigene Themes erscheinen als Kacheln in der Galerie und im Profil-Dropdown, mit **Bearbeiten** und **Löschen**. + +Technik: + +- Gespeichert pro Benutzer in der Tabelle `user_themes` (API `GET/POST /themes`, `DELETE /themes/{id}`, max. 200 KB), also im Daten-Volume und auf allen Geräten verfügbar. +- Aktiv gesetzt wird ein eigenes Theme als `custom:`. [`theme.ts`](../frontend/src/lib/theme.ts) setzt das CSS live als `