Screenshots: restliche UI-Bereiche bebildert (65 Bilder), UI-Abgleich korrigiert
- Anwender: Fremdschluessel-Drawer, Uebersetzungsleiste, Feldsuche, JSON-Overlay, Medien-Lightbox, Upload-Warteschlange, Fremddatei, Stellvertretung - Admin: Token-Liste/-Anlage, Projekt-Admin, Team-/Org-Drawer, Theme-Umschalter, Chat-Verlauf, Voice-Filter, Befehlspalette (konzept.md) - Korrigiert: Token-Anlage nur im Profil, allowReload/-Backup/-Snapshots sind config.yml-Flags, UI-Strings (Serververwaltete Felder, Ausgewaehlte Medien), ADR-0003 ohne stillgelegten Sync - Nicht darstellbar (im Mock): Session-Timeout, Suchindex-Banner, KI-Werkzeugstatus/Vision, Drill-Down, Inline-Anlage - als Platzhalter begruendet - Build: 71 Seiten gruen, 0 tote Links/Anker/Bildpfade
No files matched your search
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"generatedAt": "2026-10-17T01:48:54.973Z",
|
"generatedAt": "2026-10-17T02:28:29.469Z",
|
||||||
"stats": {
|
"stats": {
|
||||||
"files": 70,
|
"files": 70,
|
||||||
"byDir": {
|
"byDir": {
|
||||||
@@ -46,21 +46,19 @@
|
|||||||
"src/content/docs/reference/openapi.md:6 Platzhalter"
|
"src/content/docs/reference/openapi.md:6 Platzhalter"
|
||||||
],
|
],
|
||||||
"t1Refs": [
|
"t1Refs": [
|
||||||
"src/content/docs/admin/konzept.md",
|
|
||||||
"src/content/docs/admin/setup.md",
|
|
||||||
"src/content/docs/adr/0003-selbstlaeufer.md"
|
"src/content/docs/adr/0003-selbstlaeufer.md"
|
||||||
],
|
],
|
||||||
"tibiAdminRefs": [
|
"tibiAdminRefs": [
|
||||||
"src/content/docs/admin/aktionen.md (2×)",
|
"src/content/docs/admin/aktionen.md (2×)",
|
||||||
"src/content/docs/admin/ansichten-listen.md (2×)",
|
"src/content/docs/admin/ansichten-listen.md (2×)",
|
||||||
"src/content/docs/admin/benutzer-rechte.md (2×)",
|
"src/content/docs/admin/benutzer-rechte.md (7×)",
|
||||||
"src/content/docs/admin/customizing.md (2×)",
|
"src/content/docs/admin/customizing.md (2×)",
|
||||||
"src/content/docs/admin/eintrags-editor.md (2×)",
|
"src/content/docs/admin/eintrags-editor.md (2×)",
|
||||||
"src/content/docs/admin/exporte.md (2×)",
|
"src/content/docs/admin/exporte.md (2×)",
|
||||||
"src/content/docs/admin/ki-funktionen.md (2×)",
|
"src/content/docs/admin/ki-funktionen.md (3×)",
|
||||||
"src/content/docs/admin/konzept.md (3×)",
|
"src/content/docs/admin/konzept.md (4×)",
|
||||||
"src/content/docs/admin/medien.md (2×)",
|
"src/content/docs/admin/medien.md (2×)",
|
||||||
"src/content/docs/admin/setup.md (4×)",
|
"src/content/docs/admin/setup.md (5×)",
|
||||||
"src/content/docs/adr/0001-starlight.md (1×)",
|
"src/content/docs/adr/0001-starlight.md (1×)",
|
||||||
"src/content/docs/adr/0002-code-schlaegt-doku.md (2×)",
|
"src/content/docs/adr/0002-code-schlaegt-doku.md (2×)",
|
||||||
"src/content/docs/adr/0003-selbstlaeufer.md (1×)",
|
"src/content/docs/adr/0003-selbstlaeufer.md (1×)",
|
||||||
@@ -68,6 +66,7 @@
|
|||||||
"src/content/docs/anwender/benutzer-teams.md (1×)",
|
"src/content/docs/anwender/benutzer-teams.md (1×)",
|
||||||
"src/content/docs/anwender/exportieren.md (3×)",
|
"src/content/docs/anwender/exportieren.md (3×)",
|
||||||
"src/content/docs/anwender/ki-nutzen.md (1×)",
|
"src/content/docs/anwender/ki-nutzen.md (1×)",
|
||||||
|
"src/content/docs/anwender/lesen-suchen-filtern.md (1×)",
|
||||||
"src/content/docs/anwender/medien.md (1×)",
|
"src/content/docs/anwender/medien.md (1×)",
|
||||||
"src/content/docs/anwender/orientierung.md (2×)",
|
"src/content/docs/anwender/orientierung.md (2×)",
|
||||||
"src/content/docs/anwender/seiten-bauen.md (1×)",
|
"src/content/docs/anwender/seiten-bauen.md (1×)",
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
**Stand:** 2026-10-16, umgesetzt am 2026-10-17.
|
**Stand:** 2026-10-16, umgesetzt am 2026-10-17.
|
||||||
|
|
||||||
> **Zahlen in §1 sind der Audit-Stand vom 16.10.** (61 Seiten, 30 Screenshots) — bewusst als Schnappschuss stehen gelassen.
|
> **Zahlen in §1 sind der Audit-Stand vom 16.10.** (61 Seiten, 30 Screenshots) — bewusst als Schnappschuss stehen gelassen.
|
||||||
> **Ist-Stand nach der Umsetzung (17.10.):** 70 Inhaltsseiten / 8.264 Zeilen, 49 Screenshots (40 Anwender, 9 Admin), 71 Build-Seiten,
|
> **Ist-Stand nach der Umsetzung (17.10.):** 70 Inhaltsseiten, **65 Screenshots** (48 Anwender, 17 Admin), 71 Build-Seiten,
|
||||||
> 0 tote Links, 8 legitime „Platzhalter"-Marker, `npm run build` grün. Fortschritt siehe §18.
|
> 0 tote Links/Anker/Bildpfade, 8 legitime „Platzhalter"-Marker, `npm run build` grün. Fortschritt siehe §18. Noch ohne Bild: Suchindex-Banner, Session-Timeout, Drill-Down/Sprungziele, Inline-Anlage/Rückverweise, KI-Vision-/Werkzeug-Ansicht (alle im Mock nicht darstellbar), `anwender/hilfe.md`.
|
||||||
|
|
||||||
**Rahmen (aus der Zielsetzung):**
|
**Rahmen (aus der Zielsetzung):**
|
||||||
Die Doku **soll** beschreiben: (a) alle Funktionen des tibi-server für Entwickler und Administratoren beim Aufsetzen und Betreiben von Projekten, (b) alle tibi-admin-nova-Funktionen, die Entwickler zum korrekten Konfigurieren brauchen, (c) alle tibi-admin-nova-Funktionen aus Anwendersicht anhand von Screenshots (Mock-Projekt `corporate`, nie `t1`).
|
Die Doku **soll** beschreiben: (a) alle Funktionen des tibi-server für Entwickler und Administratoren beim Aufsetzen und Betreiben von Projekten, (b) alle tibi-admin-nova-Funktionen, die Entwickler zum korrekten Konfigurieren brauchen, (c) alle tibi-admin-nova-Funktionen aus Anwendersicht anhand von Screenshots (Mock-Projekt `corporate`, nie `t1`).
|
||||||
@@ -751,6 +751,18 @@ Statuslegende: ✅ erledigt und reviewed · 🔄 läuft · ⬜ offen · 🔴 blo
|
|||||||
| Issues für die Nachbar-Repos | ✅ | `plans/offene-issues.md`: 7× tibi-server, 4× tibi-admin-nova, 2× tibi-types (mit Beleg) |
|
| Issues für die Nachbar-Repos | ✅ | `plans/offene-issues.md`: 7× tibi-server, 4× tibi-admin-nova, 2× tibi-types (mit Beleg) |
|
||||||
| P9 Repo-Hygiene (Löschungen) | ⬜ | **bewusst nicht ausgeführt** — Löschen in fremden Repos braucht Freigabe; Kandidatenliste steht in §12.1 |
|
| P9 Repo-Hygiene (Löschungen) | ⬜ | **bewusst nicht ausgeführt** — Löschen in fremden Repos braucht Freigabe; Kandidatenliste steht in §12.1 |
|
||||||
|
|
||||||
|
### Welle G — Screenshot-Nachtrag (restliche UI-Bereiche) · Stand 2026-10-17 ✅
|
||||||
|
|
||||||
|
| Punkt | Status | Ergebnis |
|
||||||
|
|---|---|---|
|
||||||
|
| Anwender-Motive (G1) | ✅ | 8 neue Bilder: FK-Drawer, Sprachleiste/Übersetzen, Feldsuche, JSON-Overlay, Medien-Lightbox, Upload-Warteschlange, Fremddatei, Stellvertretungs-Banner; 3 neue Kurzabschnitte, 3 Abschnitte erweitert |
|
||||||
|
| Admin-Motive (G2) | ✅ | 9 neue Bilder: Token-Liste, Token-Anlage (Profil), Projekt-Admin-Drawer, Team- und Org-Drawer, Theme-Umschalter, Chat-Verlauf, Voice im Filter |
|
||||||
|
| Befehlspalette im Admin | ✅ | neuer Abschnitt + Bild in `admin/konzept.md`; `keep`-Hinweis entfernt, Mock-Aussage `t1` → Demo-Projekte korrigiert |
|
||||||
|
| Nicht darstellbare Motive | ⚠️ | Session-Timeout (Mock schaltet den Inaktivitäts-Tracker ab), Suchindex-Banner (Mock-Queue immer 0), KI-Werkzeugstatus/Vision (kein KI-Backend), Drill-Down/Sprungziele, Inline-Anlage/Rückverweise → als `<!-- Screenshot (T-SHOTS) … -->` markiert, Grund dokumentiert |
|
||||||
|
| Textkorrekturen aus dem UI-Abgleich | ✅ | „Token anlegen nur im Profil" (Token-Admin ist name-only/edit), `allowReload/-Backup/-Snapshots` sind reine `config.yml`-Flags (0 Treffer im Frontend), „**Serververwaltete Felder**", „**Ausgewählte Medien**" |
|
||||||
|
| Welle-G-Review | ✅ | 17 Bilder geprüft: keine verwaisten Dateien, keine toten Pfade, alle Alt-Texte spezifisch, alle ≤ 200 KB; 3 Muss-Fixes umgesetzt; Urteil „abnehmbar" |
|
||||||
|
| Build/Audit | ✅ | 71 Seiten grün, 0 tote Links/Anker/Bildpfade, 0 kaputte Tabellen |
|
||||||
|
|
||||||
### Abschluss-Review (general Subagent) und Nacharbeit · 2026-10-17 ✅
|
### Abschluss-Review (general Subagent) und Nacharbeit · 2026-10-17 ✅
|
||||||
|
|
||||||
| Befund des Abschluss-Reviews | Nacharbeit |
|
| Befund des Abschluss-Reviews | Nacharbeit |
|
||||||
|
|||||||
@@ -178,6 +178,7 @@ Vollständige Prüfung von Code und Doku, dann Abarbeitung in Wellen. Übersicht
|
|||||||
| C | P5 `reference/schema-properties.md` (generiert) + Starter-Kapitel + 5 neue Anwender-Seiten | ✅ |
|
| C | P5 `reference/schema-properties.md` (generiert) + Starter-Kapitel + 5 neue Anwender-Seiten | ✅ |
|
||||||
| D | P7 Stil, Starlight, Struktur, UI-Text-Treue, Kontrast | ✅ |
|
| D | P7 Stil, Starlight, Struktur, UI-Text-Treue, Kontrast | ✅ |
|
||||||
| E | P6b Screenshots: 9 Admin- + 10 Anwender-Bilder aus `corporate` | ✅ |
|
| E | P6b Screenshots: 9 Admin- + 10 Anwender-Bilder aus `corporate` | ✅ |
|
||||||
|
| G | Screenshot-Nachtrag: restliche UI-Bereiche (8 Anwender + 9 Admin + Befehlspalette) | ✅ (65 Bilder gesamt) |
|
||||||
| F | P8 Meta (AGENTS.md, Werkzeuge, Issues) | ✅ |
|
| F | P8 Meta (AGENTS.md, Werkzeuge, Issues) | ✅ |
|
||||||
| — | P9 Repo-Hygiene (Löschungen in Nachbar-Repos) | ⬜ Freigabe nötig |
|
| — | P9 Repo-Hygiene (Löschungen in Nachbar-Repos) | ⬜ Freigabe nötig |
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 82 KiB |
@@ -55,6 +55,7 @@ Manche Sammlungen haben Reiter über der Liste (`meta.subNavigation`, z. B. `?su
|
|||||||
- Ausgeschlossen sind standardmäßig: Fremd-Medien-Widgets (`foreignMedia`, `foreignFile` u. ä.), native Datei-Felder und reine Objekt-Kästen ohne angemeldete Unterfelder.
|
- Ausgeschlossen sind standardmäßig: Fremd-Medien-Widgets (`foreignMedia`, `foreignFile` u. ä.), native Datei-Felder und reine Objekt-Kästen ohne angemeldete Unterfelder.
|
||||||
- Fremdschlüssel-Felder bieten eine Auswahl mit Suche statt Freitext.
|
- Fremdschlüssel-Felder bieten eine Auswahl mit Suche statt Freitext.
|
||||||
- Die Vorschläge für Auswahlwerte (`_facet`-Route) liefern je Wert die Trefferzahl mit.
|
- Die Vorschläge für Auswahlwerte (`_facet`-Route) liefern je Wert die Trefferzahl mit.
|
||||||
|
- Textfelder (z. B. **Seitentitel**) zeigen bei Fokus ein Mikrofon-Symbol: Antippen diktiert den Filterwert statt Tippen (`ui/VoiceFilterTextInput.svelte`, nur im fokussierten Feld sichtbar). Ohne Mikrofon-Unterstützung im Browser bleibt das Feld ein reines Textfeld.
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem label="Blättern">
|
<TabItem label="Blättern">
|
||||||
@@ -100,7 +101,7 @@ Teile eine gefilterte Liste per URL — Empfänger sehen exakt dieselbe Auswahl,
|
|||||||
| Gesamtzahl fehlt oder lädt lange | `/_count` auf altem Server nicht verfügbar | Direkt laden lassen (Fallback) oder Server aktualisieren |
|
| Gesamtzahl fehlt oder lädt lange | `/_count` auf altem Server nicht verfügbar | Direkt laden lassen (Fallback) oder Server aktualisieren |
|
||||||
| Ansicht startet „falsch“ | `viewHint` der Sammlung schlägt die Startansicht vor | Ansicht einmal wechseln — `view=…` in der URL gewinnt |
|
| Ansicht startet „falsch“ | `viewHint` der Sammlung schlägt die Startansicht vor | Ansicht einmal wechseln — `view=…` in der URL gewinnt |
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Anwender-Sicht zum Ändern vieler Einträge auf einmal: [Massenbearbeitung](/anwender/massenbearbeitung/).
|
Anwender-Sicht zum Ändern vieler Einträge auf einmal: [Massenbearbeitung](/anwender/massenbearbeitung/).
|
||||||
|
|
||||||
|
|||||||
@@ -32,9 +32,16 @@ Die Kette lautet **Org → Team → Benutzer → Projekt**. Du pflegst sie im Ad
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Benutzer | `UserTab` (Liste mit Suche, Filter, Sortierung, Paginierung), `UserCreateDrawer`, `UserDetailDrawer` | Name, Login, Rolle, Org-/Team-Mitgliedschaften |
|
| Benutzer | `UserTab` (Liste mit Suche, Filter, Sortierung, Paginierung), `UserCreateDrawer`, `UserDetailDrawer` | Name, Login, Rolle, Org-/Team-Mitgliedschaften |
|
||||||
| Teams | `TeamTab`, `TeamCreateDrawer`, `TeamDetailDrawer` | Name, Farbe, Org-Zugehörigkeit, Mitglieder, Berechtigungen |
|
| Teams | `TeamTab`, `TeamCreateDrawer`, `TeamDetailDrawer` | Name, Farbe, Org-Zugehörigkeit, Mitglieder, Berechtigungen |
|
||||||
| Orgs | `OrgTab`, `OrgCreateDrawer`, `OrgDetailDrawer` | Name, Mitglieder (`OrgAssignmentSection`), Projekte |
|
|
||||||
| Projekte | `ProjectAdminView`, `ProjectDetailDrawer`, `ProjectCreateDrawer` | Name, Status (online/offline), Org-Zuordnung, Rechte-Matrix |
|
| Projekte | `ProjectAdminView`, `ProjectDetailDrawer`, `ProjectCreateDrawer` | Name, Status (online/offline), Org-Zuordnung, Rechte-Matrix |
|
||||||
|
|
||||||
|
Der Team-Drawer zeigt **Einstellungen** mit **Name**, **Organisation**, **Beschreibung** und **Farbe**, darunter die **Berechtigungen** als Chips (Eingabehilfe `z.B. pages, media, admin`, Knopf **Berechtigung hinzufügen**) und die **Teammitglieder** mit **Benutzer anlegen**.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Der Org-Drawer zeigt **Einstellungen** (**Name**, **Branche**, **Ort**, **Website**, **Logo ersetzen** / **Logo entfernen**), darunter **Zugeordnete Teams** (**Team anlegen**), **Zugeordnete Benutzer** (**Benutzer anlegen**) und **Zugeordnete Projekte** mit **Metadaten** (Erstellt, Aktualisiert).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
<Steps>
|
<Steps>
|
||||||
|
|
||||||
1. Org anlegen (`OrgCreateDrawer`).
|
1. Org anlegen (`OrgCreateDrawer`).
|
||||||
@@ -60,6 +67,14 @@ Die Kette lautet **Org → Team → Benutzer → Projekt**. Du pflegst sie im Ad
|
|||||||
|
|
||||||
Persönliche Token (PATs) pflegst du auf zwei Wegen: im eigenen **Profil** (`TokenSettings.svelte`) oder als Admin im **Token-Reiter** (`TokenAdminTab.svelte`).
|
Persönliche Token (PATs) pflegst du auf zwei Wegen: im eigenen **Profil** (`TokenSettings.svelte`) oder als Admin im **Token-Reiter** (`TokenAdminTab.svelte`).
|
||||||
|
|
||||||
|
Als Admin siehst du unter **Tokens** die Liste **API-Tokens** mit dem Untertitel **Alle Tokens aller Benutzer.** Je Zeile stehen **Name**, **Besitzer**, **Prefix**, **Berechtigungen** und **Zuletzt benutzt**. Über **Aktualisieren** lädst du die Liste neu; je Zeile änderst du den Namen (**Bearbeiten**) oder entziehst den Zugriff (**Widerrufen**). Anlegen geht nur im eigenen Profil.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Im Profil legst du über **Neues Token** einen Drawer mit **Name** (Beispiel `z. B. CI Deploy`) und **Berechtigungen** an. Die Scopes wählst du per Checkbox oder über **Alles auswählen**; dazu kommen **Eigene Scopes (Wildcards)** mit **Hinzufügen**. Ein Ablaufdatum gibt es in der Oberfläche nicht — das Feld existiert nur serverseitig und wird bewusst weder angezeigt noch gesetzt.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<TabItem label="Erstellen">
|
<TabItem label="Erstellen">
|
||||||
|
|
||||||
@@ -80,6 +95,10 @@ Persönliche Token (PATs) pflegst du auf zwei Wegen: im eigenen **Profil** (`Tok
|
|||||||
|
|
||||||
## Projekt-Admin-Token
|
## Projekt-Admin-Token
|
||||||
|
|
||||||
|
Die **Projektverwaltung** (`/admin/projects`, `ProjectAdminView.svelte`) listet alle Projekte mit Organisation, Status und Kollektionen. Ein Klick öffnet den Detail-Drawer mit **Einstellungen** (**Name**, **Organisation**, **Beschreibung**, **Namespace**, **Config-Datei**), **Team-Zuordnungen** (**Team zuordnen**) und **Zugehörige Benutzer**. Die vier Token-Flags unten stehen nicht in der Oberfläche — sie kommen ausschließlich aus `api/config.yml`.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
Der Admin ruft Reload, Suchindex-Aufbau, Backup und Snapshots mit einem **Projekt-Token** auf.
|
Der Admin ruft Reload, Suchindex-Aufbau, Backup und Snapshots mit einem **Projekt-Token** auf.
|
||||||
Welche dieser vier Operationen das Token darf, steuern vier Flags in `api/config.yml` (`admin.tokens[]`):
|
Welche dieser vier Operationen das Token darf, steuern vier Flags in `api/config.yml` (`admin.tokens[]`):
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,10 @@ Die KI im **tibi-admin** (Verwaltungs-Backend, Release Nova) hilft dir beim Redi
|
|||||||
|
|
||||||
Was die KI dabei sieht (`aiController.ts`, `AiChat.svelte`): Neben dem UI-Snapshot hängt der Chat deine Aktionen außerhalb des Chats an die nächste Nachricht an (`[User actions performed outside of chat] … [User message] …`) und markiert die erste Nachricht mit `[lang=de]` (bzw. deiner Sprache). Manche Provider verlangen die Systemnachricht genau einmal vorn — deshalb wandern Aktionen in die Benutzer-Nachricht, nicht in eine zweite Systemnachricht.
|
Was die KI dabei sieht (`aiController.ts`, `AiChat.svelte`): Neben dem UI-Snapshot hängt der Chat deine Aktionen außerhalb des Chats an die nächste Nachricht an (`[User actions performed outside of chat] … [User message] …`) und markiert die erste Nachricht mit `[lang=de]` (bzw. deiner Sprache). Manche Provider verlangen die Systemnachricht genau einmal vorn — deshalb wandern Aktionen in die Benutzer-Nachricht, nicht in eine zweite Systemnachricht.
|
||||||
|
|
||||||
|
Über das Menü neben **Nova** verwaltest du den **Chat-Verlauf**: **Neuer Chat** beginnt ein leeres Gespräch, darunter listet der Admin gespeicherte Konversationen. Der Verlauf liegt nur lokal im Browser (`localStorage`); ohne gespeicherte Gespräche steht dort **Noch keine Konversationen**.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
| Baustein | Datei | Aufgabe |
|
| Baustein | Datei | Aufgabe |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Verlauf | `lib/aiChatHistory.ts` | Gespräche in `localStorage` (`tibi-ai-conversations`, weiches Limit ~4 MB, älteste zuerst raus) |
|
| Verlauf | `lib/aiChatHistory.ts` | Gespräche in `localStorage` (`tibi-ai-conversations`, weiches Limit ~4 MB, älteste zuerst raus) |
|
||||||
|
|||||||
@@ -5,14 +5,18 @@ description: Was tibi-admin ist, wie es läuft und wie es zum Server passt.
|
|||||||
|
|
||||||
import { Card, CardGrid } from '@astrojs/starlight/components';
|
import { Card, CardGrid } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
> **Handseite.** Wird vom Sync nie überschrieben (`keep`).
|
|
||||||
|
|
||||||
**tibi-admin** ist das Verwaltungs-Backend — die Bedienoberfläche zum Tibi-Server (aktuelles Release **Nova**). Code-Repo: `tibi-admin-nova` — das ist das einzig gültige Repo, alte `tibi-admin`-Repos werden ignoriert. Projekt-Websites (kleine Websites, Shops, Intranet-Anwendungen aus `tibi-svelte-starter`) sind eigenständig und laufen getrennt davon.
|
**tibi-admin** ist das Verwaltungs-Backend — die Bedienoberfläche zum Tibi-Server (aktuelles Release **Nova**). Code-Repo: `tibi-admin-nova` — das ist das einzig gültige Repo, alte `tibi-admin`-Repos werden ignoriert. Projekt-Websites (kleine Websites, Shops, Intranet-Anwendungen aus `tibi-svelte-starter`) sind eigenständig und laufen getrennt davon.
|
||||||
|
|
||||||
- Svelte-SPA als statisches Bundle, läuft lokal im Mock-Modus (Projekt `t1`) und in Staging/Live hinter Reverse Proxy gegen den echten tibi-server.
|
- Svelte-SPA als statisches Bundle, läuft lokal im Mock-Modus (Demo-Projekte wie `corporate`) und in Staging/Live hinter Reverse Proxy gegen den echten tibi-server.
|
||||||
- Laufzeitwerte in `frontend/assets/system.config.json`, Proxy-Ziele/Modelle in `config/ai-proxy.config.json`.
|
- Laufzeitwerte in `frontend/assets/system.config.json`, Proxy-Ziele/Modelle in `config/ai-proxy.config.json`.
|
||||||
- Screens: `frontend/src/lib/components/admin/` (Hub, Orgs, Teams, User, Projekte) und `components/entry/` (Editor, Widgets, Drawers, Preview).
|
- Screens: `frontend/src/lib/components/admin/` (Hub, Orgs, Teams, User, Projekte) und `components/entry/` (Editor, Widgets, Drawers, Preview).
|
||||||
|
|
||||||
|
## Schnellsuche und Tastatur
|
||||||
|
|
||||||
|
Die **Befehlspalette** öffnest du mit `/` (oder `Strg`/`Cmd` + `K`) — sie springt zu Sammlungen, Einträgen, Aktionen und Verwaltungsseiten, ohne dass du dich durch die Navigation klickst. `?` zeigt alle Tastenkürzel (Vollreferenz: [Tastatur und Schnellsuche](/reference/tastatur-kurzbefehle/)).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Wo finde ich was?
|
## Wo finde ich was?
|
||||||
|
|
||||||
<CardGrid stagger>
|
<CardGrid stagger>
|
||||||
@@ -33,4 +37,4 @@ import { Card, CardGrid } from '@astrojs/starlight/components';
|
|||||||
</Card>
|
</Card>
|
||||||
</CardGrid>
|
</CardGrid>
|
||||||
|
|
||||||
Verifiziert am 2b091d8 2026-10-13 (tibi-admin-nova)
|
Verifiziert am 2b091d8 2026-10-17 (tibi-admin-nova)
|
||||||
@@ -65,7 +65,7 @@ Nützliche Ziele: `make docker-ps`, `make docker-logs`, `make docker-down`, `mak
|
|||||||
| Modus | Erkennen | Verhalten |
|
| Modus | Erkennen | Verhalten |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Echter Server | `API_BASE` zeigt auf laufenden tibi-server | Alle Daten live; Login per Benutzername/Passwort |
|
| Echter Server | `API_BASE` zeigt auf laufenden tibi-server | Alle Daten live; Login per Benutzername/Passwort |
|
||||||
| Mock-Modus | Kein Server erreichbar / Mock-Flag (`isMockMode()`) | Lokale Demo-Daten, Demo-Projekt `t1`; Actions simulieren Fortschritt (`simulateMockProgress`) |
|
| Mock-Modus | Kein Server erreichbar / Mock-Flag (`isMockMode()`) | Lokale Demo-Daten aus `frontend/assets/mock/` mit den Demo-Projekten (`corporate`, `blog`, `shop`, `events`, `intranet`); Actions simulieren Fortschritt (`simulateMockProgress`) |
|
||||||
|
|
||||||
- Laufzeitwerte liegen in `frontend/assets/system.config.json` (KI-Endpunkte, TTS-Stimmen); Proxy-Ziele und Modelle in `config/ai-proxy.config.json` — siehe [KI-Funktionen](/admin/ki-funktionen/).
|
- Laufzeitwerte liegen in `frontend/assets/system.config.json` (KI-Endpunkte, TTS-Stimmen); Proxy-Ziele und Modelle in `config/ai-proxy.config.json` — siehe [KI-Funktionen](/admin/ki-funktionen/).
|
||||||
- Fehlerbilder bei falscher Verbindung: Login-Fehlerbox, Netzwerkfehler bei Listen/Actions — dann `API_BASE`, Server-Container (`make docker-ps`) und [Token-Köpfe](/reference/token-koepfe/) prüfen.
|
- Fehlerbilder bei falscher Verbindung: Login-Fehlerbox, Netzwerkfehler bei Listen/Actions — dann `API_BASE`, Server-Container (`make docker-ps`) und [Token-Köpfe](/reference/token-koepfe/) prüfen.
|
||||||
@@ -88,6 +88,12 @@ Stimmen (Schema-Enum): `eva-de` (Standard), `kerstin-de`, `ramona-de`; Tempo-Def
|
|||||||
|
|
||||||
Fehlt die Datei oder ist sie ungültig, fällt der Admin still auf die eingebauten Defaults zurück (`console.warn`, `runtime-system-config.ts:219-222`) — die Werte entsprechen der ausgelieferten `system.config.json`. Eigene Werte werden tief mit den Defaults verschmolzen (`deepMerge`) und danach sanitiert (unbekannte Engine → `auto`, leere Stimmenliste → Defaults, TTS-Tempo auf `min`/`max` geklemmt).
|
Fehlt die Datei oder ist sie ungültig, fällt der Admin still auf die eingebauten Defaults zurück (`console.warn`, `runtime-system-config.ts:219-222`) — die Werte entsprechen der ausgelieferten `system.config.json`. Eigene Werte werden tief mit den Defaults verschmolzen (`deepMerge`) und danach sanitiert (unbekannte Engine → `auto`, leere Stimmenliste → Defaults, TTS-Tempo auf `min`/`max` geklemmt).
|
||||||
|
|
||||||
|
## Darstellung (Hell/Dunkel)
|
||||||
|
|
||||||
|
Den Theme-Umschalter findest du rechts oben in der Kopfzeile (`ui/ThemeToggle.svelte`). Er zeigt als Tooltip **Hell** oder **Dunkel** — je nachdem, in welchen Modus du wechselst. Deine Wahl landet in `localStorage` (`tibi-theme`) und gilt schon vor dem ersten Zeichnen, damit nichts flackert.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Prüfen
|
## Prüfen
|
||||||
|
|
||||||
```sh title="Build und Tests"
|
```sh title="Build und Tests"
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ description: Wie weiterentwickelnde Agenten die Doku automatisch mitpflegen.
|
|||||||
---
|
---
|
||||||
|
|
||||||
- **Datum:** 2026-10-16
|
- **Datum:** 2026-10-16
|
||||||
- **Kontext:** Tibi-Server, tibi-admin und Starter entwickeln sich weiter. Die Doku (57 Seiten, Stand 2026-10-16) soll nicht veralten.
|
- **Kontext:** Tibi-Server, tibi-admin und Starter entwickeln sich weiter. Die Doku (70 Seiten, Stand 2026-10-17) soll nicht veralten.
|
||||||
- **Entscheidung:** Definition of Done für jede Änderung an API, Hooks, Collections, Permissions, Jobs, Realtime, LLM, MCP, Suche, Deploy oder Admin-UX: passende Doku-Seite aktualisieren + `Verifiziert am <Commit> <Datum>` erneuern + `npm run sync && npm run build` grün. Screenshots nur aus Mock-Projekt `corporate` (nie `t1`), Auftrag unter `plans/t-shots-arbeitsauftrag.md`. Vollständigkeits-Tabelle in `plans/doku-ausbau.md` bei neuen Fähigkeiten erweitern (1 Fähigkeit = 1 Dokustelle).
|
- **Entscheidung:** Definition of Done für jede Änderung an API, Hooks, Collections, Permissions, Jobs, Realtime, LLM, MCP, Suche, Deploy oder Admin-UX: passende Doku-Seite aktualisieren + `Verifiziert am <7-stelliger-hash> <JJJJ-MM-TT> (<repo>)` erneuern + `node scripts/audit-docs.mjs && npm run build` grün (der frühere Server-Sync ist stillgelegt, siehe `AGENTS.md` §4). Screenshots nur aus Mock-Projekt `corporate` (nie `t1`), Auftrag unter `plans/t-shots-arbeitsauftrag.md`. Vollständigkeits-Tabelle in `plans/doku-ausbau.md` bei neuen Fähigkeiten erweitern (1 Fähigkeit = 1 Dokustelle). Für Schemas: `npm run gen:schemas` laufen lassen statt Werte abzuschreiben.
|
||||||
- **Folgen:** Diese Regel in die Agenten-Regeln von `tibi-server`, `tibi-admin-nova` und `tibi-svelte-starter` spiegeln (jeweils `AGENTS.md`-Ergänzung, noch offen). CI in tibi-docs prüft Drift (Docs neuer als Sync, Schema-Feld ohne Widget-Doku).
|
- **Folgen:** Diese Regel in die Agenten-Regeln von `tibi-server`, `tibi-admin-nova` und `tibi-svelte-starter` spiegeln (jeweils `AGENTS.md`-Ergänzung, noch offen). CI in tibi-docs prüft Drift: `scripts/audit-docs.mjs` (Links, Anker, Bilder, Tabellen, Stempel) und `npm run gen:schemas` müssen ohne Änderung durchlaufen.
|
||||||
@@ -54,7 +54,9 @@ Führe höchstens drei Versuche durch und bitte danach deine Betreuung um ein ne
|
|||||||
|
|
||||||
## Automatisches Sitzungsende
|
## Automatisches Sitzungsende
|
||||||
|
|
||||||
Bei längerer Inaktivität meldet dich tibi-admin automatisch ab. Es erscheint der Hinweis **Sitzung abgelaufen – bitte neu anmelden**.
|
Kurz vor dem automatischen Abmelden erscheint der Hinweis **Sitzung läuft ab** mit der Meldung „Du wirst wegen Inaktivität gleich automatisch abgemeldet.". Wähle **Angemeldet bleiben**, um weiterzuarbeiten, oder **Jetzt abmelden**, um die Sitzung sofort zu beenden. Reagierst du nicht, meldet dich tibi-admin automatisch ab und es erscheint der Hinweis **Sitzung abgelaufen – bitte neu anmelden**.
|
||||||
|
|
||||||
|
<!-- Screenshot (T-SHOTS): Hinweisdialog Sitzung läuft ab mit Angemeldet bleiben und Jetzt abmelden, Mock-Projekt corporate, Alt-Text deutsch -->
|
||||||
|
|
||||||
<Steps>
|
<Steps>
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,10 @@ Gib keine Zugänge auf Zuruf frei und ändere keine Rechte eigenmächtig. Falsch
|
|||||||
|
|
||||||
Meldet sich der Support mit deinem Konto an, um dir zu helfen (Stellvertretung über **Als dieser Benutzer einloggen**), geschieht das ausschließlich nach Absprache mit dir oder deiner Teamleitung. Sprich ihn an, wenn du unsicher bist. Du musst dafür nichts einrichten.
|
Meldet sich der Support mit deinem Konto an, um dir zu helfen (Stellvertretung über **Als dieser Benutzer einloggen**), geschieht das ausschließlich nach Absprache mit dir oder deiner Teamleitung. Sprich ihn an, wenn du unsicher bist. Du musst dafür nichts einrichten.
|
||||||
|
|
||||||
|
Während der Stellvertretung zeigt ein Banner über der Seite **Eingeloggt als @Benutzername** mit dem Hinweis **Impersonation** und rechts die Schaltfläche **Zurück zur Administration**. Alles, was du in dieser Zeit tust, geschieht im Namen des vertretenen Kontos. Zum Beenden klickst du auf **Zurück zur Administration** (**Beenden**) und landest wieder in deiner eigenen Sitzung.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
Was du über das Verwaltungs-Backend wissen musst, steht unter [Admin-Konzept](/admin/konzept/).
|
Was du über das Verwaltungs-Backend wissen musst, steht unter [Admin-Konzept](/admin/konzept/).
|
||||||
|
|
||||||
Verifiziert am 2b091d8 2026-10-17 (tibi-admin-nova)
|
Verifiziert am 2b091d8 2026-10-17 (tibi-admin-nova)
|
||||||
@@ -49,6 +49,24 @@ Links steht das Formular, rechts stehen Zusatzinformationen. Arbeite die Felder
|
|||||||
Ein Verweis verbindet zwei Inhalte, beispielsweise eine Nachricht mit einem Bild aus [Bilder und Dateien](/anwender/medien/). Du wählst ihn im Fenster **Durchsuchen** und übernimmst ihn mit **Auswählen**.
|
Ein Verweis verbindet zwei Inhalte, beispielsweise eine Nachricht mit einem Bild aus [Bilder und Dateien](/anwender/medien/). Du wählst ihn im Fenster **Durchsuchen** und übernimmst ihn mit **Auswählen**.
|
||||||
</Aside>
|
</Aside>
|
||||||
|
|
||||||
|
Das Fenster **Einträge durchsuchen** listet alle Einträge der verknüpften Sammlung mit dem Suchfeld **Suche in Kollektion…**, Filter und der Umschaltung zwischen **Tabelle** und **Karten**. Bereits verknüpfte Einträge erscheinen als Chips und lassen sich über das Kreuz wieder **Entfernen**.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Sprachen und Übersetzungen
|
||||||
|
|
||||||
|
Arbeitet deine Sammlung mehrsprachig, wechselst du oben im Editor mit **DE** und **EN** (Tastenkürzel Strg + L) die Bearbeitungssprache. Jedes übersetzbare Feld zeigt daneben seinen Sprachstand an; über **Übersetzen** am Feld überträgst du den Text in die andere Sprache und prüfst ihn danach Zeichen für Zeichen.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Feldsuche und JSON-Ansicht
|
||||||
|
|
||||||
|
In langen Formularen drückst du Strg + F (am Mac Cmd + F) und suchst im Fenster **Feld oder Wert suchen…** nach Feldnamen oder Inhalten; Enter springt zum Treffer. Über die Befehlspalette öffnest du **Eintrag als JSON bearbeiten**: Oben stehen die **Serververwaltete Felder** (nur lesbar), darunter der JSON-Text. Mit **Übernehmen** speicherst du, mit **Abbrechen** verwirfst du die Ansicht ohne Änderung.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Speichern und prüfen
|
## Speichern und prüfen
|
||||||
|
|
||||||
<Steps>
|
<Steps>
|
||||||
|
|||||||
@@ -53,6 +53,12 @@ Liefert die Suche keine Treffer, gehe wie folgt vor:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
## Hinweis zum Suchindex
|
||||||
|
|
||||||
|
Arbeitet deine Sammlung mit Hintergrundsuche, baut tibi-admin den **Suchindex** im Hintergrund auf. Solange Einträge offen sind, zeigt ein Hinweisbanner über der Liste „wird im Hintergrund aktualisiert" mit der Zahl der offenen Einträge. Du kannst normal weiterarbeiten; sobald der Zähler auf null steht, verschwindet das Banner von selbst. Über **Details ein-/ausblenden** siehst du den Stand je Sammlung, bei Problemen stößt **Neu aufbauen** den Aufbau erneut an.
|
||||||
|
|
||||||
|
<!-- Screenshot (T-SHOTS): Suchindex-Hinweisbanner im Projekt-/Sammlungs-Header, Mock-Projekt corporate, Alt-Text deutsch -->
|
||||||
|
|
||||||
## Filtern und sortieren
|
## Filtern und sortieren
|
||||||
|
|
||||||
Filtern bedeutet: Du zeigst nur Einträge mit einer bestimmten Eigenschaft, beispielsweise einer Sprache. Sortieren bedeutet: Du änderst die Reihenfolge.
|
Filtern bedeutet: Du zeigst nur Einträge mit einer bestimmten Eigenschaft, beispielsweise einer Sprache. Sortieren bedeutet: Du änderst die Reihenfolge.
|
||||||
|
|||||||
@@ -23,6 +23,10 @@ Bilder und Dateien liegen in einer eigenen Sammlung, meist Mediathek genannt. Vo
|
|||||||
In der **Medienvorschau** blätterst du mit **Vorheriges** und **Nächstes**. Schließe sie mit **Schließen**, um zum Raster zurückzukehren.
|
In der **Medienvorschau** blätterst du mit **Vorheriges** und **Nächstes**. Schließe sie mit **Schließen**, um zum Raster zurückzukehren.
|
||||||
</Aside>
|
</Aside>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Oben in der Vorschau stehen Position, Dateiname und Größe. Daneben findest du **Hereinzoomen** und **Herauszoomen** sowie **Bearbeiten**, **Herunterladen** und **In neuem Tab öffnen**.
|
||||||
|
|
||||||
## Datei hochladen
|
## Datei hochladen
|
||||||
|
|
||||||
<Steps>
|
<Steps>
|
||||||
@@ -40,6 +44,10 @@ Titel und Beschreibung werden aus dem Dateinamen vorbefüllt. Prüfe sie und kor
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
Sobald du Dateien ablegst, gleitet unten die Warteschlange ein („0 von 1 hochgeladen") mit Dateiname und Größe. **Schnell-Upload** lädt sofort hoch, **Bearbeiten & hochladen** öffnet vorher den Dialog **Medieneintrag bearbeiten**. Über **Zurück zur Warteschlange** kehrst du jederzeit zur Übersicht zurück.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
Wird ein Upload abgelehnt, gehe wie folgt vor:
|
Wird ein Upload abgelehnt, gehe wie folgt vor:
|
||||||
|
|
||||||
<Steps>
|
<Steps>
|
||||||
@@ -80,6 +88,10 @@ Fehlt die Bildbeschreibung, erstellt die KI sie selbst („KI beschreibt das Bil
|
|||||||
|
|
||||||
## Bild in einen Eintrag einbinden
|
## Bild in einen Eintrag einbinden
|
||||||
|
|
||||||
|
Ist das Bild bereits verknüpft, zeigt das Feld die **Ausgewählte Medien** mit Vorschau, Titel und Beschreibung. Über das Stiftsymbol tauschst du das Bild aus (**Verknüpftes Medium bearbeiten**), über das Kreuz entfernst du die Verknüpfung (**Entfernen**). Noch ohne Bild wählst du über **Vorhandene durchsuchen** aus der Mediathek oder ziehst die Datei direkt auf das Feld (**Dateien hierher ziehen oder klicken**).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
<Steps>
|
<Steps>
|
||||||
|
|
||||||
1. Öffne den Eintrag, der das Bild benötigt.
|
1. Öffne den Eintrag, der das Bild benötigt.
|
||||||
|
|||||||