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
This commit is contained in:
1 parent
1928922e07
commit
7cf81be169
32 files changed
+108
-20
No files matched your search
@@ -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.
|
||||
- Fremdschlüssel-Felder bieten eine Auswahl mit Suche statt Freitext.
|
||||
- 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 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 |
|
||||
| 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/).
|
||||
|
||||
|
||||
@@ -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 |
|
||||
| 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 |
|
||||
|
||||
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>
|
||||
|
||||
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`).
|
||||
|
||||
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>
|
||||
<TabItem label="Erstellen">
|
||||
|
||||
@@ -80,6 +95,10 @@ Persönliche Token (PATs) pflegst du auf zwei Wegen: im eigenen **Profil** (`Tok
|
||||
|
||||
## 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.
|
||||
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.
|
||||
|
||||
Ü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 |
|
||||
|---|---|---|
|
||||
| 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';
|
||||
|
||||
> **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.
|
||||
|
||||
- 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`.
|
||||
- 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?
|
||||
|
||||
<CardGrid stagger>
|
||||
@@ -33,4 +37,4 @@ import { Card, CardGrid } from '@astrojs/starlight/components';
|
||||
</Card>
|
||||
</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 |
|
||||
|---|---|---|
|
||||
| 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/).
|
||||
- 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).
|
||||
|
||||
## 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
|
||||
|
||||
```sh title="Build und Tests"
|
||||
|
||||
Reference in new issue
Block a user