Files
property-match/src/domain/agentWorkload.ts
T
Benjamin Sutter d8f8f728cc refactor(startseite): Meetingraum als Fotoszene mit Live-Auslastung
Die gezeichnete Raumkulisse ist ersetzt. Aus Farbflächen konstruierte Wände
bleiben neben fotografierten Agentenporträts erkennbar gezeichnet — die
Bildwirkung muss aus dem Foto kommen, nicht aus Geometrie. Entfallen sind
damit die beiden SVG-Stadtansichten, die CSS-3D-Flächen und die Farbwelt
DS_MEETING_ROOM.

Neu trägt die Szene die Basler Aussicht aus dem Auftrag als Foto (§5), mit
abgestuftem Verlauf für Lesbarkeit und Übergang zur Objektliste. Ein Austausch
des Motivs ist ein Einzeiler in `roomBackdrop.ts`.

Mehrwert statt Kulisse: Jedes Namensschild zeigt die aktuelle Auslastung
seines Agenten — überfällige Fristen, Termine der Woche, offene Exposés, neue
Marktchancen, Objekte mit Datenlücken, offene Freigaben. Darüber fasst ein
Anriss zusammen, wie viele Bereiche heute Aufmerksamkeit brauchen. Damit
beantwortet die Startseite die Frage, mit der sie geöffnet wird, statt sie
auf sechs Zahlen zu verteilen.

- `agentWorkloadService` hält die fachlichen Festlegungen: Zeitfenster,
  Dringlichkeitsschwellen und Formulierungen. Der Stichzeitpunkt ist ein
  Parameter, nicht die Systemuhr — dieselbe Datenlage ergibt dasselbe
  Ergebnis, und der Dienst ist ohne Renderer prüfbar (10 neue Tests).
- `useAgentWorkload` sammelt nur die Bestände ein.
- Noras Zahl wird nie «dringend»: sie schlägt vor, sie entscheidet nicht.
- Die Schilder bemessen ihre Höchstbreite an der Szenenbreite (`cqw`), nicht
  am Fenster. Am Fenster gemessen überlappten sie auf schmalen Laptops, weil
  die Szene um das Seitenmenü schmaler ist.

Geprüft: 423 Tests, Typecheck, Build, ESLint, Token-Schwelle (889/925).
Im Browser 1280–1920 px: keine Überlappungen, Titel und «Filter & Übersicht»
beim Einstieg sichtbar, alle sechs Agentenklicks auf der richtigen Subpage,
Tablet-Ansicht mit allen sechs Agenten, keine Konsolenfehler, keine 404.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 14:07:21 +02:00

36 lines
1.3 KiB
TypeScript

/**
* Property On — aktuelle Auslastung eines digitalen Mitarbeitenden.
*
* Der Meetingraum auf der Startseite zeigt nicht nur, *wer* für einen
* arbeitet, sondern *woran gerade*. Ohne diese Zahl wäre die Szene Dekoration;
* mit ihr ist sie eine Lageübersicht — genau der Anspruch aus CLAUDE.md §1:
* jeder Bildschirm ist um eine Entscheidung herum gebaut.
*
* Die Werte sind abgeleitet, nie gespeichert (CLAUDE.md §5.5): sie entstehen
* aus den bestehenden Beständen an Fristen, Terminen, Leads und Objekten.
*/
/** Dringlichkeit — steuert allein die Farbe, nie die Aussage. */
export const WorkloadTone = {
/** Nichts Auffälliges. */
CALM: 'CALM',
/** Sollte diese Woche angeschaut werden. */
ATTENTION: 'ATTENTION',
/** Überfällig oder kritisch. */
URGENT: 'URGENT',
} as const
export type WorkloadTone = typeof WorkloadTone[keyof typeof WorkloadTone]
export interface AgentWorkload {
/** Agenten-ID, identisch mit `AGENT_PHOTOS` und der Sitzordnung. */
agentId: string
/** Die Zahl selbst — für Sortierung und Tests. */
count: number
/**
* Vollständiger Satz für die Plakette, z. B. «3 Fristen diese Woche».
* Bewusst inklusive Zahl: eine nackte Ziffer neben einem Kopf sagt nichts.
*/
label: string
tone: WorkloadTone
}