From d8f8f728cc050d16e65b3afaf3778a5d34cf3429 Mon Sep 17 00:00:00 2001 From: Benjamin Sutter Date: Thu, 6 Aug 2026 14:07:21 +0200 Subject: [PATCH] refactor(startseite): Meetingraum als Fotoszene mit Live-Auslastung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- .../meeting-room/basel-rhein-muenster.jpg | Bin 0 -> 73134 bytes .../meeting-room/AgentMeetingRoom.tsx | 176 +++++++++++---- src/components/meeting-room/AgentSeat.tsx | 184 +++++++++------ .../meeting-room/BaselViewFront.tsx | 102 --------- src/components/meeting-room/BaselViewLeft.tsx | 95 -------- .../meeting-room/MeetingRoomScene.tsx | 211 ++++-------------- .../meeting-room/meetingRoomSeats.ts | 20 +- src/components/meeting-room/roomBackdrop.ts | 51 +++++ src/domain/agentWorkload.ts | 35 +++ src/hooks/useAgentWorkload.ts | 38 ++++ src/lib/ds.ts | 73 ------ .../__tests__/agentWorkloadService.test.ts | 145 ++++++++++++ src/services/agentWorkloadService.ts | 155 +++++++++++++ 13 files changed, 717 insertions(+), 568 deletions(-) create mode 100644 src/assets/meeting-room/basel-rhein-muenster.jpg delete mode 100644 src/components/meeting-room/BaselViewFront.tsx delete mode 100644 src/components/meeting-room/BaselViewLeft.tsx create mode 100644 src/components/meeting-room/roomBackdrop.ts create mode 100644 src/domain/agentWorkload.ts create mode 100644 src/hooks/useAgentWorkload.ts create mode 100644 src/services/__tests__/agentWorkloadService.test.ts create mode 100644 src/services/agentWorkloadService.ts diff --git a/src/assets/meeting-room/basel-rhein-muenster.jpg b/src/assets/meeting-room/basel-rhein-muenster.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fff8aa53198f7eb55563525361cb0148236ac5fb GIT binary patch literal 73134 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 z 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 literal 0 HcmV?d00001 diff --git a/src/components/meeting-room/AgentMeetingRoom.tsx b/src/components/meeting-room/AgentMeetingRoom.tsx index 3c2fd94..6c2374e 100644 --- a/src/components/meeting-room/AgentMeetingRoom.tsx +++ b/src/components/meeting-room/AgentMeetingRoom.tsx @@ -1,15 +1,13 @@ -import { useCallback } from 'react' +import { useCallback, useMemo } from 'react' import { useNavigate } from 'react-router' import { Box, ButtonBase, Typography, useMediaQuery, useTheme } from '@mui/material' import { MeetingRoomScene } from './MeetingRoomScene' import { AgentSeat } from './AgentSeat' -import { BaselViewFront } from './BaselViewFront' import { MEETING_ROOM_SEATS } from './meetingRoomSeats' import { AgentAvatar } from '../team' -import { DS_MEETING_ROOM, DS_TEXT } from '../../lib/ds' - -const R = DS_MEETING_ROOM.room -const L = DS_MEETING_ROOM.label +import { useAgentWorkload } from '../../hooks/useAgentWorkload' +import { WorkloadTone } from '../../domain/agentWorkload' +import { DS_ACCENT, DS_NEUTRAL, DS_TEXT } from '../../lib/ds' /** * Höhe der globalen Kopfzeile plus des Bereichs, der unter dem Meetingraum @@ -27,25 +25,45 @@ const RESERVED_PX = TOP_BAR_PX + KEEP_VISIBLE_BELOW_PX /** Unter dieser Höhe würde die Szene zur Briefmarke — dann lieber scrollen. */ const MIN_SCENE_PX = 300 +const TONE_COLOR: Record = { + [WorkloadTone.CALM]: DS_ACCENT.success.main, + [WorkloadTone.ATTENTION]: DS_ACCENT.warning.main, + [WorkloadTone.URGENT]: DS_ACCENT.danger.main, +} + /** * Agenten-Meetingraum auf der Startseite (Runde 5, §3). * - * Der Betrachter sitzt am Kopfende des Tisches; die fünf Agenten sitzen an den - * Längsseiten, Giorgio vis-à-vis vor der Fensterfront. Jeder Platz ist eine - * ganze klickbare Einheit und führt auf seine Arbeitsseite, Giorgio in die + * Die sechs digitalen Mitarbeitenden stehen vor der Basler Fensterfront, jeder + * mit Porträt, Funktion und seiner aktuellen Auslastung. Ein Klick auf die + * ganze Einheit öffnet den jeweiligen Arbeitsbereich, bei Giorgio die * Personalverwaltung. * - * Auf schmalen Schirmen bricht die Perspektive zusammen — dort steht statt der - * Szene eine einfache Kachelreihe. Sie zeigt dieselben Agenten mit denselben - * Zielen; ausgeblendet wird niemand (§3.7). + * Die Zahl auf dem Schild ist der Unterschied zwischen Kulisse und + * Arbeitsmittel: sie sagt vor dem Klick, wo etwas liegt. + * + * Auf schmalen Schirmen tritt an die Stelle der Szene eine Kachelreihe mit + * denselben Angaben und denselben Zielen; ausgeblendet wird niemand (§3.7). */ export function AgentMeetingRoom() { const navigate = useNavigate() const theme = useTheme() const isNarrow = useMediaQuery(theme.breakpoints.down('md')) + const { data: workload } = useAgentWorkload() const handleOpen = useCallback((path: string) => navigate(path), [navigate]) + // Ein Durchgang über dieselbe Liste statt zweier Filterläufe (CLAUDE.md §10.4). + const { urgentCount, attentionCount } = useMemo(() => { + let urgent = 0 + let attention = 0 + for (const w of Object.values(workload)) { + if (w.tone === WorkloadTone.URGENT) urgent += 1 + else if (w.tone === WorkloadTone.ATTENTION) attention += 1 + } + return { urgentCount: urgent, attentionCount: attention } + }, [workload]) + const height = { height: `max(${MIN_SCENE_PX}px, calc(100vh - ${RESERVED_PX}px))`, '@supports (height: 100dvh)': { @@ -55,12 +73,13 @@ export function AgentMeetingRoom() { if (isNarrow) { return ( - - {/* Die Aussicht nimmt den Platz, den die Kacheln nicht brauchen — sonst - klafft auf hohen Schirmen eine leere Wand zwischen beiden. */} - - - + + + - {MEETING_ROOM_SEATS.map(seat => ( - handleOpen(seat.path)} - aria-label={`${seat.name}, ${seat.role} — Arbeitsbereich öffnen`} - sx={{ - display: 'flex', alignItems: 'center', gap: 1, - p: 1, borderRadius: 2, justifyContent: 'flex-start', - bgcolor: L.bg, border: '1px solid', borderColor: L.border, - '&.Mui-focusVisible': { outline: `2px solid ${L.focus}`, outlineOffset: 2 }, - }} - > - - - - {seat.name} - - - {seat.role} - - - - ))} + {MEETING_ROOM_SEATS.map(seat => { + const w = workload[seat.id] + return ( + handleOpen(seat.path)} + aria-label={ + w + ? `${seat.name}, ${seat.role} — ${w.label}. Arbeitsbereich öffnen` + : `${seat.name}, ${seat.role} — Arbeitsbereich öffnen` + } + sx={{ + display: 'flex', alignItems: 'center', gap: 1, + p: 1, borderRadius: 2, justifyContent: 'flex-start', + bgcolor: DS_NEUTRAL.white, + boxShadow: '0 2px 8px rgba(8,14,24,0.10)', + '&.Mui-focusVisible': { outline: `2px solid ${DS_NEUTRAL.gold}`, outlineOffset: 2 }, + }} + > + + + + {seat.name} + + + {seat.role} + + {w && ( + + {w.label} + + )} + + + ) + })} ) @@ -108,12 +138,64 @@ export function AgentMeetingRoom() { + + + {MEETING_ROOM_SEATS.map(seat => ( - + ))} ) } + +/** + * Anriss über der Szene. + * + * Er sagt in einem Satz, was die sechs Schilder darunter im Detail zeigen — + * und beantwortet damit die einzige Frage, mit der jemand diese Seite öffnet: + * muss ich heute irgendwo eingreifen? Ohne diesen Satz müsste man sechs Zahlen + * einzeln lesen und selbst zusammenzählen. + */ +function SceneHeadline({ urgentCount, attentionCount }: { urgentCount: number; attentionCount: number }) { + const summary = + urgentCount > 0 + ? `${urgentCount} ${urgentCount === 1 ? 'Bereich braucht' : 'Bereiche brauchen'} heute Ihre Aufmerksamkeit` + : attentionCount > 0 + ? `${attentionCount} ${attentionCount === 1 ? 'Bereich ist' : 'Bereiche sind'} in Arbeit — nichts Überfälliges` + : 'Nichts Offenes — Ihre Belegschaft ist auf Kurs' + + return ( + + + Ihre digitale Belegschaft + + + {summary} + + + ) +} diff --git a/src/components/meeting-room/AgentSeat.tsx b/src/components/meeting-room/AgentSeat.tsx index ab3590e..4dd579c 100644 --- a/src/components/meeting-room/AgentSeat.tsx +++ b/src/components/meeting-room/AgentSeat.tsx @@ -2,37 +2,51 @@ import { memo } from 'react' import { ButtonBase, Box, Typography } from '@mui/material' import { AgentAvatar } from '../team' import type { MeetingRoomSeat } from './meetingRoomSeats' -import { SEAT_BASE_HEAD_PX, SeatSide } from './meetingRoomSeats' -import { DS_MEETING_ROOM, DS_TEXT } from '../../lib/ds' +import { SEAT_BASE_HEAD_PX } from './meetingRoomSeats' +import type { AgentWorkload } from '../../domain/agentWorkload' +import { WorkloadTone } from '../../domain/agentWorkload' +import { DS_ACCENT, DS_NEUTRAL, DS_TEXT } from '../../lib/ds' -const L = DS_MEETING_ROOM.label -const T = DS_MEETING_ROOM.table +const TONE_COLOR: Record = { + [WorkloadTone.CALM]: DS_ACCENT.success.main, + [WorkloadTone.ATTENTION]: DS_ACCENT.warning.main, + [WorkloadTone.URGENT]: DS_ACCENT.danger.main, +} export interface AgentSeatProps { seat: MeetingRoomSeat + /** Aktuelle Auslastung; fehlt sie, zeigt die Plakette nur Name und Funktion. */ + workload?: AgentWorkload onOpen: (path: string) => void } /** - * Ein Platz am Besprechungstisch (Runde 5, §3.6/§3.7). + * Ein Platz im Meetingraum (Runde 5, §3.6/§3.7). * - * Die gesamte Einheit aus Stuhllehne, Kopf und Plakette ist ein einziger - * Schalter — nicht nur der Kopf. Ein 60-Pixel-Porträt als einzige Trefferfläche - * wäre auf jedem Laptop eine Zumutung; die Plakette darüber trägt ohnehin den - * Namen und gehört zum selben Ziel. + * Porträt, Namensschild und Auslastung sind eine einzige Schaltfläche — nicht + * nur der Kopf. Ein 60-Pixel-Porträt als einzige Trefferfläche wäre auf jedem + * Laptop eine Zumutung, und das Schild darunter zeigt ohnehin dasselbe Ziel. * - * `ButtonBase` statt `
`: damit sind Tastaturbedienung, Enter und - * Leertaste, Fokusring und Rollen-Semantik ohne eigenen Code korrekt. + * Die Zahl auf dem Schild ist der eigentliche Grund, warum diese Seite mehr ist + * als ein Bild: sie sagt, woran der Agent gerade arbeitet, und macht den Klick + * zu einer Entscheidung statt zu einem Rundgang. + * + * `ButtonBase` statt `
`: Tastaturbedienung, Enter und Leertaste, + * Fokusring und Rollen-Semantik kommen damit ohne eigenen Code korrekt. */ -export const AgentSeat = memo(function AgentSeat({ seat, onOpen }: AgentSeatProps) { +export const AgentSeat = memo(function AgentSeat({ seat, workload, onOpen }: AgentSeatProps) { const head = Math.round(SEAT_BASE_HEAD_PX * seat.scale) - const isHead = seat.side === SeatSide.HEAD + const toneColor = workload ? TONE_COLOR[workload.tone] : DS_TEXT.secondary return ( onOpen(seat.path)} - aria-label={`${seat.name}, ${seat.role} — Arbeitsbereich öffnen`} + aria-label={ + workload + ? `${seat.name}, ${seat.role} — ${workload.label}. Arbeitsbereich öffnen` + : `${seat.name}, ${seat.role} — Arbeitsbereich öffnen` + } sx={{ position: 'absolute', left: `${seat.x}%`, @@ -42,51 +56,74 @@ export const AgentSeat = memo(function AgentSeat({ seat, onOpen }: AgentSeatProp display: 'flex', flexDirection: 'column', alignItems: 'center', - // Grosszügige, aber nicht überlappende Klickfläche rund um den Kopf. - px: 1.25, + gap: 0.75, + px: 0.5, py: 1, - borderRadius: 2, - transition: 'transform 0.15s ease, background-color 0.15s ease', - '&:hover, &.Mui-focusVisible': { - bgcolor: 'rgba(255,255,255,0.16)', - transform: 'translate(-50%, -52%)', + borderRadius: 3, + transition: 'transform 0.18s ease', + '&:hover, &.Mui-focusVisible': { transform: 'translate(-50%, calc(-50% - 5px))' }, + '&:hover .seat-plate, &.Mui-focusVisible .seat-plate': { + boxShadow: '0 14px 34px rgba(8,14,24,0.42)', }, - '&.Mui-focusVisible': { outline: `2px solid ${L.focus}`, outlineOffset: 2 }, + '&.Mui-focusVisible': { outline: `2px solid ${DS_NEUTRAL.gold}`, outlineOffset: 3 }, }} > - {/* - Plakette über dem Kopf: Name und Funktion. Sie schwebt vollständig - oberhalb des Porträts — läge sie auch nur teilweise darüber, verdeckte - der Kopf sie, weil er später gezeichnet wird. Der seitliche Versatz aus - der Sitzordnung fächert benachbarte Plaketten auseinander (§3.7). - */} + {/* Kontaktschatten unter dem Porträt — ohne ihn schwebt der Kopf über dem Bild. */} + + + + + + {/* Namensschild unter dem Kopf: Name, Funktion, aktuelle Auslastung. */} + {seat.role} + + {workload && ( + + + + {workload.label} + + + )} - - {/* Stuhllehne hinter dem Kopf — am Kopfende sitzt Giorgio frontal. */} - - - ) }) diff --git a/src/components/meeting-room/BaselViewFront.tsx b/src/components/meeting-room/BaselViewFront.tsx deleted file mode 100644 index 6e83bb1..0000000 --- a/src/components/meeting-room/BaselViewFront.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { memo } from 'react' -import { DS_MEETING_ROOM } from '../../lib/ds' - -const V = DS_MEETING_ROOM.view - -/** - * Blick durch die gegenüberliegende Fensterfront (Runde 5, §3.5). - * - * Das Büro steht in Kleinbasel nahe dem Claraturm, der Blick geht über den - * Rhein auf die Grossbasler Altstadt mit dem Münster — die Blickrichtung der - * beiden Referenzbilder aus dem Auftrag. - * - * Gezeichnet und nicht fotografiert: ein Foto in einem Fensterrahmen mit - * gerechneter Perspektive verzieht sich auf jedem zweiten Monitor, und ein - * fehlendes Bild wäre ein 404 im leeren Fenster. Das SVG skaliert stattdessen - * mit dem Rahmen und braucht keine Netzanfrage. - */ -export const BaselViewFront = memo(function BaselViewFront() { - return ( - - ) -}) diff --git a/src/components/meeting-room/BaselViewLeft.tsx b/src/components/meeting-room/BaselViewLeft.tsx deleted file mode 100644 index 80cb819..0000000 --- a/src/components/meeting-room/BaselViewLeft.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { memo } from 'react' -import { DS_MEETING_ROOM } from '../../lib/ds' - -const V = DS_MEETING_ROOM.view - -/** - * Blick durch die linke Glasfront (Runde 5, §3.5). - * - * Rheinabwärts: der weitere Verlauf des Rheins, die Altstadt am rechten Ufer - * und die Wettsteinbrücke. Das Bild ist stärker längs angelegt als der Blick - * nach vorne — die linke Front wird perspektivisch schmal und hoch beschnitten, - * deshalb steht die Brücke bewusst weit oben statt am Bildrand. - */ -export const BaselViewLeft = memo(function BaselViewLeft() { - return ( - - ) -}) diff --git a/src/components/meeting-room/MeetingRoomScene.tsx b/src/components/meeting-room/MeetingRoomScene.tsx index 34c8d30..6a35f7e 100644 --- a/src/components/meeting-room/MeetingRoomScene.tsx +++ b/src/components/meeting-room/MeetingRoomScene.tsx @@ -1,188 +1,55 @@ import { memo } from 'react' -import { Box } from '@mui/material' -import { BaselViewFront } from './BaselViewFront' -import { BaselViewLeft } from './BaselViewLeft' -import { DS_MEETING_ROOM } from '../../lib/ds' - -const R = DS_MEETING_ROOM.room -const T = DS_MEETING_ROOM.table +import { Box, Typography } from '@mui/material' +import { ROOM_BACKDROP } from './roomBackdrop' +import { DS_NEUTRAL, DS_TEXT } from '../../lib/ds' /** - * Der leere Besprechungsraum — Decke, Wände, Boden, Fenster, Tisch (Runde 5, §3). + * Bildhintergrund des Agenten-Meetingraums (Runde 5, §3). * - * Zentralperspektive mit einem Fluchtpunkt in der Bildmitte: der Betrachter - * sitzt am Kopfende, der Tisch läuft von ihm weg zur gegenüberliegenden - * Fensterfront. Rechts eine geschlossene Wand, links und gegenüber - * boden- bis deckenhohe Glasfronten (§3.5). + * Bewusst eine einzige Bildfläche mit Verlauf — und nicht länger ein aus + * Flächen konstruierter Raum. Ein selbstgezeichneter Raum bleibt neben + * fotografierten Porträts immer erkennbar gezeichnet; die Bildwirkung muss + * deshalb aus dem Foto kommen, nicht aus Geometrie. * - * Umgesetzt als Flächen mit `clip-path`, nicht mit CSS-3D-Transformationen: - * Trapeze in Prozentkoordinaten skalieren mit jeder Rahmengrösse mit, während - * `rotateY`/`perspective` bei wechselnder Höhe neu justiert werden müsste. Es - * braucht dafür weder eine 3D-Engine noch eine Animationsbibliothek (§1). - * - * Senkrechten bleiben in der Einpunktperspektive senkrecht — die Pfosten beider - * Fensterfronten stehen deshalb gerade, nur die waagrechten Rahmen laufen zum - * Fluchtpunkt. - * - * Die Zahlen unten sind die Geometrie des Raums und stehen deshalb hier statt - * in einer Konstantendatei — sie ergeben nur zusammen mit den Flächen Sinn. + * Die Komponente selbst weiss nichts über das Motiv. Sie zeigt, was + * `ROOM_BACKDROP` liefert — die Aussicht heute, eine Raumaufnahme später. */ - -/** Fluchtebene: obere und untere Kante der gegenüberliegenden Wand, in Prozent. */ -const HORIZON_TOP = 26 -const HORIZON_BOTTOM = 62 -/** Seitliche Kanten der gegenüberliegenden Wand. */ -const WALL_LEFT = 30 -const WALL_RIGHT = 70 - export const MeetingRoomScene = memo(function MeetingRoomScene() { return ( - - {/* Decke */} - - - {/* Boden */} - - - {/* ── Rechte Seite: geschlossene Wand ── */} - - {/* Sockelleiste — trennt Wand und Boden sichtbar voneinander */} - - - {/* ── Linke Seite: boden- bis deckenhohe Glasfront, Blick rheinabwärts ── */} - - {/* - Das Bild deckt nur den Wandstreifen ab, nicht die ganze Szene: bei - `inset: 0` streckte `preserveAspectRatio="slice"` es auf Szenenbreite, - und im schmalen Ausschnitt blieben nur riesige Baumkronen übrig. - */} - - - - - - {/* Senkrechte Pfosten */} - {[9, 17.5, 25.5].map(x => ( - - ))} - {/* Waagrechter Kämpfer — läuft mit der Perspektive zum Fluchtpunkt */} - - {/* Deckenanschluss und Bodenschiene der Front */} - - - {/* Streiflicht auf dem Glas */} - - - - {/* ── Gegenüberliegende Fensterfront: Rhein, Altstadt, Münster ── */} +