feat(startseite): digitale Belegschaft mit Präsenz, eigener Stimme und Nachweis

Der nachgebaute Meetingraum entfällt. Eine gezeichnete Kulisse bleibt neben
fotografierten Porträts erkennbar gezeichnet — und ein Raum allein macht
niemanden menschlich. Menschlich wirkt im echten Büro dasselbe wie hier: dass
jemand da ist, etwas zu sagen hat und nachweisbar gearbeitet hat.

Die Startseite zeigt deshalb sechs Personenkarten vor einer abgedunkelten
Büroaufnahme. Jede Karte trägt, was ein Personalblatt trägt:

- Porträt mit Dienstpunkt — ist da oder pausiert
- Name, Funktion, Abteilung, Personalnummer
- Autonomiestufe: «Autonom», «Freigabe erforderlich», «Nur Vorschlag».
  Sie sagt, wie viel Verantwortung jemand trägt, und trennt Personal von
  Automatisierung.
- Ein Satz in der ersten Person zur aktuellen Lage, statt einer Kennzahl:
  «Bei 12 Fristen ist der Termin durch. Fürs Eskalieren brauche ich deine
  Freigabe.»
- Die zuletzt protokollierte Handlung mit Zeitangabe. Diese Zeile ist der
  Unterschied zwischen Behauptung und Beleg — eine Kennzahl kann jede
  Software anzeigen.

Darüber fasst ein Anriss zusammen, wie viele Mitarbeitende heute eine
Entscheidung brauchen, samt Dienststand der Belegschaft.

Schichten nach CLAUDE.md §4.2: `agentPresenceService` entscheidet, was als
letzte Handlung gilt und wie eine Zeitangabe in Alltagssprache lautet;
`agentWorkloadService` hält Zeitfenster, Schwellen und Formulierungen. Beide
nehmen den Stichzeitpunkt als Parameter — dieselbe Datenlage ergibt immer
dasselbe Ergebnis und ist ohne Renderer prüfbar (22 Tests).

Giorgio hat kein Personalblatt; Abteilung, Personalnummer und Stufe kommen
aus der zentralen Rollendefinition. Wer kein Dossier hat, gilt als im Dienst —
sonst stünde die halbe Belegschaft still, weil Stammdaten fehlen.

Bild: Unsplash, freie kommerzielle Lizenz. Herkunft und Austauschhinweis in
`src/assets/meeting-room/HERKUNFT.md`.

Geprüft: 435 Tests, Typecheck, Build, ESLint, Token-Schwelle (889/925).
Browser 1280–1920 px und Tablet: sechs Karten ohne Überlappung, Titel und
«Filter & Übersicht» beim Einstieg sichtbar, alle sechs Klicks auf der
richtigen Subpage, keine Konsolenfehler, keine 404.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin SutterandClaude Opus 5 committed 2026-08-06 14:50:16 +02:00
1 parent d8f8f728cc
commit 435f2aa2f1
17 files changed
+698 -487

No files matched your search

+44
View File
@@ -0,0 +1,44 @@
import type { AgentWorkload } from './agentWorkload'
/**
* Property On — ein digitaler Mitarbeitender, so wie er auf der Startseite
* auftritt (Runde 5).
*
* Zusammengesetzt aus drei Quellen, weil Menschlichkeit aus dem Zusammenspiel
* entsteht und nicht aus einem einzelnen Feld:
*
* - **Personalien** — Name, Funktion, Abteilung, Personalnummer. Wer eine
* Personalnummer hat, ist Personal und kein Werkzeug.
* - **Auslastung** — woran er gerade sitzt, in seinen eigenen Worten.
* - **Letzte Handlung** — was er zuletzt getan hat, mit Zeitangabe. Das ist
* der Beleg, dass wirklich jemand arbeitet; ohne ihn bleibt jede Zusage
* eine Behauptung.
*/
export interface AgentPresence {
agentId: string
name: string
role: string
/** Abteilung laut Personalblatt; leer, solange kein Dossier vorliegt. */
department: string
/** Personalnummer laut Personalblatt; leer, solange kein Dossier vorliegt. */
personnelNumber: string
/** Zielseite des Klicks auf die Karte. */
path: string
/** true, solange der Mitarbeitende nicht pausiert ist. */
onDuty: boolean
/**
* Was der Mitarbeitende selbst entscheiden darf — «Autonom», «Freigabe
* erforderlich» oder «Nur Vorschlag». Die Stufe ist das stärkste Merkmal des
* Ansatzes: sie sagt, wie viel Verantwortung jemand trägt, und trennt
* Personal von einer Automatisierung.
*/
autonomy: string
workload: AgentWorkload
/** Zuletzt protokollierte Handlung — fehlt, wenn noch nichts vorliegt. */
lastAction?: {
/** Was getan wurde, als ganzer Satz aus dem Protokoll. */
title: string
/** Wann, in Alltagssprache: «vor 12 Min.», «gestern 16:40». */
when: string
}
}
+7
View File
@@ -32,4 +32,11 @@ export interface AgentWorkload {
*/
label: string
tone: WorkloadTone
/**
* Derselbe Sachverhalt in der ersten Person — das, was der Agent dazu sagen
* würde. Digitale Mitarbeitende sollen als Personal auftreten, nicht als
* Kennzahl: «Bei 12 Fristen ist der Termin durch» ist dieselbe Information
* wie «12 überfällig», aber es spricht jemand.
*/
voice: string
}